250629

lililllilillll·2025년 6월 29일

개발 일지

목록 보기
217/350

✅ What I did today


  • LeetCode


⚔️ LeetCode


3. Longest Substring Without Repeating Characters

int Three::lengthOfLongestSubstring(std::string s)
{
	//// 중복되는게 있으면 거기서부터 앞에 있는 중복 없는 Substring 만들기
	//// 중복되는게 없으면 maxLen 갱신 시도
	//int strLen = s.length();
	//int startIdx = 0;
	//int maxLen = 0;
	//std::unordered_set<char> checklist;
	//for (int i = 0; i < strLen; i++)
	//{
	//	// 중복 못 찾았다면 추가
	//	if (checklist.find(s[i]) == checklist.end())
	//	{
	//		checklist.insert(s[i]);
	//	}
	//	// 중복 찾았다면 substring 갱신
	//	else
	//	{
	//		for (int j=startIdx; j<i; j++)
	//		{
	//			if (s[i] == s[j])
	//			{
	//				startIdx = j + 1;
	//				break;
	//			}
	//			else
	//			{
	//				checklist.erase(s[j]);
	//			}
	//		}
	//	}
	//	maxLen = std::max(i - startIdx + 1, maxLen);
	//}
	//return maxLen;

	// 슬라이딩 테이블
	// ASCII 테이블을 만들고 등장했던 인덱스를 기록
	// right를 올려가며 최대 길이 (right - left) 갱신
	// right의 테이블 값과 중복이 있다면 (테이블 값이 -1이 아니라면) left = 중복값 인덱스 + 1

	vector<int> table(256, -1);
	int left = 0;
	int s_len = s.size();
	int maxLen = 0;

	for (int right = 0; right < s_len; right++)
	{
		if (table[s[right]] != -1 && left <= table[s[right]])
		{
			left = table[s[right]]+1;
		}
		table[s[right]] = right;
		
		maxLen = max(maxLen, right - left + 1);
	}

	return maxLen;
}
  • int table[256] = {0};은 모든 요소를 0으로 초기화하지만, int table[256] = {-1}은 모든 요소를 -1로 초기화시키지 않는다. 첫번째 요소만 초기화시킨다.

std::vector, std::list

vector : 동적 배열
list : 이중 연결 리스트

항목std::vectorstd::list
내부 구조연속된 배열 (contiguous memory)이중 연결 리스트 (doubly linked list)
메모리 구조데이터가 한 덩어리로 붙어 있음데이터가 노드별로 흩어져 있음
인덱스 접근빠름 (O(1)), v[i] 가능느림 (O(n)), l[i] 불가능
삽입/삭제 (중간)느림 (O(n)), 이동 발생빠름 (O(1)), 포인터만 바꿈
끝 삽입/삭제빠름 (O(1) 또는 amortized O(1))빠름 (O(1))
캐시 친화성높음낮음
사용 목적많이 읽고, 중간 삽입 적은 경우중간 삽입/삭제가 많은 경우

std::vector 생성자

explicit vector(size_type count, const T& value);

vector<int> mpp(256, -1);

count: 몇 개 만들지
value: 각 요소 초기값

c-style 배열(int[]), std::array

항목C-style 배열std::array
크기고정고정
크기 정보 유지함수 인자로 전달 시 사라짐유지됨 (.size() 가능)
복사불가능가능 (= 연산 가능)
범위 체크없음.at()은 체크함
STL 호환

최대값

#include <algorithm>

int a = 5, b = 10;
int maximum = std::max(a, b);

세 개 이상 값 비교할 땐

int m = std::max({a, b, c});

또는 std::max_element 사용

#include <algorithm>
#include <vector>

std::vector<int> v = {3, 8, 1, 6};
int maxVal = *std::max_element(v.begin(), v.end());  // 8

char

char는 1바이트(8비트), 0~255 (부호 없을 경우)
ASCII : 0~127에 매핑된 문자 집합
0~127 : 기본적으로 제어 문자, 공백, 숫자, 대소문자 영어 알파벳, 특수문자로 표현됨
128~255 : 플랫폼 따라 들어있는거 다름

char 종류

타입부호 여부범위
char플랫폼에 따라 다름-128 ~ 127 또는 0 ~ 255
signed char항상 부호 있음-128 ~ 127
unsigned char항상 부호 없음0 ~ 255

UTF-8

  • 유니코드 문자를 바이트로 저장하는 방식 중 하나
  • 1~4바이트 가변 길이 인코딩
  • string은 char 배열이라 유니코드 못 다룸
문자 종류바이트 수 (UTF-8 기준)
ASCII 문자1바이트 ('A', '1' 등)
유럽 문자2바이트 (é, ñ 등)
한글, 한자3바이트 (, 등)
이모지4바이트 (😁, 🔥 등)
profile
너 정말 **핵심**을 찔렀어

0개의 댓글