전체 글 (70) 썸네일형 리스트형 코딩테스트를 위한 자료구조 (3) — Stack / Queue 한 줄 요약: 스택도 큐도 ArrayDeque 하나로 다 된다. 우선순위가 필요하면 PriorityQueue. 옛날 Stack 클래스는 쓰지 말자.1. 스택과 큐, 뭐가 다른가둘 다 "한쪽으로 넣고 한쪽으로 빼는" 자료구조인데, 빼는 순서가 다르다.Stack (스택): LIFO — 나중에 넣은 걸 먼저 뺀다. (접시 쌓기)Queue (큐): FIFO — 먼저 넣은 걸 먼저 뺀다. (줄 서기)언제 떠올리나?되돌아가야 하는 구조 → 스택 (괄호 짝 맞추기, 뒤로가기, DFS, 수식 계산)먼저 온 순서대로 처리 → 큐 (BFS, 순서 보장 작업 처리)2. ArrayDeque — 스택도 큐도 이것 하나로Deque(덱, 양쪽 다 넣고 뺄 수 있는 자료구조)를 구현한 클래스. 스택으로도 큐로도 쓸 수 있고 둘 다 .. 코딩테스트를 위한 자료구조 (2) — 정렬 (Arrays.sort / Collections.sort) 한 줄 요약: 원시 타입 배열이면 Arrays.sort(), 객체 배열이나 리스트면 Collections.sort() 또는 List.sort(). 순서를 바꾸고 싶으면 Comparator.1. 정렬은 "전처리"다정렬 자체가 답인 문제는 드물다. 대신 정렬을 해두면 그다음 로직이 쉬워지는 경우가 많다.정렬해두면 투 포인터를 쓸 수 있다정렬해두면 이분 탐색을 쓸 수 있다정렬해두면 그리디의 기준을 잡을 수 있다 (예: 마감 시간 순, 크기 순)정렬해두면 인접한 것만 비교하면 되니 중복·최솟값 차이 등을 쉽게 구한다즉, "이걸 정렬하면 문제가 단순해지나?"를 항상 떠올려보는 게 핵심이다.2. 정렬 알고리즘 이론 — 어떤 정렬들이 있나코테에서 직접 구현할 일은 거의 없지만, 표준 정렬이 내부에서 뭘 쓰는지 알아야.. 코딩테스트를 위한 자료구조 (1) — HashMap / HashSet 한 줄 요약: "빠르게 찾고 싶다"면 Hash 계열. 값이 필요하면 HashMap, 있는지 없는지만 중요하면 HashSet.1. 왜 쓰는가배열이나 리스트에서 특정 값을 찾으려면 처음부터 끝까지 훑어야 한다(O(n)). 데이터가 10만 개면 탐색 한 번에 10만 번. 이걸 반복문 안에서 하면 O(n²)이 되어 시간 초과가 난다.Hash 계열은 평균 O(1) 로 조회·삽입·삭제를 한다. "특정 값이 있는지", "이 키에 해당하는 값이 뭔지"를 즉시 알 수 있다. 코딩테스트에서 시간 초과를 피하는 가장 흔한 무기다.2. HashMap — 키로 값을 찾는다키(key) → 값(value) 매핑. 키는 중복 불가, 값은 중복 가능.Map map = new HashMap();map.put("apple", 3); .. 절댓값을 구할 때 - Math.abs() int a = 3, b = 2; 일 때| b - a | 의 값을 구하려면Math.abs(b-a); Map에서 키(또는 값)가 포함되어있는지 찾을 때 - containsKey() / containsValue() Map map = new HashMap();이 map에 키,값을 담고담은 데이터가 존재하는지 확인하고 싶을 때 사용true / false 로 반환 키의 여부 확인map.containsKey(key); 키의 값 여부 확인map.containsValue(value); 각 요소(변수)를 한번에 List로 넣으려 할 때 - Arrays.asList() int a = 1, b = 2, c = 3; 일 때해당 변수들을 한번에 List에 넣으려면List list = Arrays.asList(a, b, c); ⚠️ 주의 ⚠️Arrays.asList()를 사용해서 만든 List는add 또는 remove 불가java.lang.UnsupportedOperationException 발생set 은 가능 Docker가 뭔지 몰라도 괜찮아 — 개발자가 Docker를 사랑하는 이유, 처음부터 차근차근 "제 컴퓨터에서는 되는데요?"개발을 시작한 지 얼마 안 됐을 때, 팀원에게 코드를 넘겨받고 실행해보려다 에러 메시지만 잔뜩 만난 경험, 혹시 있지 않나요?ModuleNotFoundError: No module named 'xxx'Error: ENOENT: no such file or directory... 분명히 같은 코드인데, 내 환경에선 실행이 안 됩니다. 상대방은 "저는 되는데요?"라고 하고, 나는 한 시간 넘게 환경 설정을 뒤지고 있습니다. Node.js 버전이 다르거나, Python 버전이 미묘하게 달랐거나, 어떤 라이브러리가 전역으로 설치되어 있거나 없거나. 이 상황이 반복되다 보면 "왜 코드보다 환경 세팅에 더 오래 걸리는 거지?"라는 생각이 자연스럽게 듭니다.Docker는 바로 이 문제에서.. 변수에서 클로저까지 — 자바스크립트 클로저 동작 원리 완전 정복 "클로저? 알 것 같은데 설명하려니 막막하다"자바스크립트를 어느 정도 다뤄본 분이라면 한 번쯤 이런 경험이 있을 거예요. 면접 준비를 하다가 "클로저가 뭔가요?"라는 질문을 마주쳤을 때, 머릿속엔 뭔가 떠오르는데 입 밖으로는 잘 안 나오는 그 느낌. 혹은 코드를 짜다가 루프 안에서 setTimeout을 썼더니 숫자가 이상하게 찍혀서 당황했던 경험. 그게 바로 클로저를 제대로 이해하지 못했을 때 생기는 일들이에요.클로저는 자바스크립트에서 거의 모든 곳에 녹아 있는 개념인데, 막상 "이게 클로저야"라고 콕 짚어 설명하기가 쉽지 않아요. 이 글에서는 변수와 스코프의 기초부터 시작해서, 클로저가 어떻게 만들어지고 어디에서 유용하게 쓰이는지를 코드 예제 중심으로 같이 살펴볼게요. 저도 처음엔 "그냥 함수 안에 함.. 이전 1 2 3 4 ··· 9 다음