본문 바로가기

분류 전체보기275

그렙(프로그래머스) 코딩테스트 후기 알고리즘 3문, SQL 2문 나왔습니다. SQL 문제는 그냥 주는 문제, 너무 쉬워서 오히려 의심스러웠습니다. 알고리즘 난이도는 그렇게 어렵지 않았는데, 실버 상위, 골드 하위 정도의 난이도였습니다. 다 푼 거 같은데 결과는 탈락.... 찾아보니까 올솔 하고도 탈락한 경우가 많더라구요? JD나 기업과 잘 맞는 사람을 찾는가 봅니다. 그래도 면접은 볼 줄 알았는데..... 2025. 3. 21.
펄어비스 코딩테스트 후기 시험 본지 한달이 지났는데, 갑자기 생각나서 씁니다. 문제는 총 15문제로 알고리즘 3문, CS 12문이었습니다. 문제 난이도는 그렇게 어렵지는 않았습니다. 다만 시험 칠 수 있는 언어가 C, C++ 인데 문제풀이를 원래 JAVA로 하다가, 최근에는 Python으로 하고 있단 말이죠? 그래서 일단 기억나는데로 하면서 막히면 라이브러리 뒤지면서 풀다보니 시간이 좀 많이 낭비됐습니다. 대충 3솔은 한 거 같은데, 3번이 좀 애매합니다. 쉽게 풀었었는데, 제가 문제를 잘 못 이해했을 수도 있어서요 그리고 CS는 대차게 말아먹었습니다. 결과는 당연히 탈락이었구요. 펄어비스 노리는 분들은 알고리즘도 알고리즘이지만 CS를 잘 준비하시는 게 좋을 것 같습니다. 2025. 3. 21.
2D 누적 합(Prefix Sum) 기법 이런게 있더라고요. 2D 누적 합은 이차원 배열(행렬)에서 특정 부분 영역의 합을 빠르게 계산해야 할 때 주로 사용됩니다. 언제 사용 할까요?1. 특정 부분 영역의 합을 자주 계산할 때 (O(1)로 최적화) 기본적으로 특정 부분의 합을 구하려면 O(N*M)이 걸리지만, 누적 합 배열을 미리 만들어두면 O(1)로 구할 수 있음.ex) 2D 배열에서 (r1, c1)부터 (r2, c2)까지의 합을 여러 번 구해야 하는 경우 부분 합 = prefix[r2][c2] - prefix[r1-1][c2] - prefix[r2][c1-1] + prefix[r1-1][c1-1] 2. 다차원 배열에서 특정 범위를 여러 번 업데이트해야 할 때 (차이 배열과 함께 사용) 특정 영역을 업데이트하는 연산이 많을 때, 차이 배열(D.. 2025. 3. 21.
Chapter 26. Code-Tuning Techniques (코드 최적화 기법) 속도 향상 & 코드 크기 줄이기 성능 = 속도 + 크기 크기 줄이기 = 코드 최적화보다는 클래스와 데이터의 재설계를 통해 더 많이 이루어짐.코드 최적화 = 대규모 설계 변경보다는 소규모 변경을 의미 이 장에서 다루는 변경은 "안티 리팩토링"= 내부 구조를 개선하는 대신, 성능 향상을 위해 구조를 저하시킵니다. 구조가 저하되지 않는다면 이를 최적화라고 간주하지 않으며, 기본적으로 표준 코딩 관행으로 사용하는 것 26.1 Logic (논리) Stop Testing When You Know the Answer  프로그래밍에서 논리 표현식을 최적화하는 중요한 방법 중 하나는 조건을 알게 되면 테스트를 멈추는 것 예를 들어, 배열에서 음수 값을 찾을 때, 음수 값을 발견하면 더 이상 배열을 계속 스캔하지 않고 즉.. 2025. 3. 9.
2025 프로그래머스 코드챌린지 1차 예선 > 비밀 코드 해독 - Python, combinations https://school.programmers.co.kr/learn/courses/30/lessons/388352 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  코드 & 풀이 from itertools import combinationsdef solution(n, q, ans): possible_code = list(combinations(range(1, n + 1), 5)) total_cnt = 0 for code in possible_code: make_code = True for i in range(len(q)): if len.. 2025. 3. 7.
트리의 부모 찾기 - Python, BFS, 재귀 깊이 제한 키우기 출처 : https://www.acmicpc.net/problem/11725   코드 import sysfrom collections import deque, defaultdictdef find_parents(N, edges): graph = defaultdict(list) for a, b in edges: graph[a].append(b) graph[b].append(a) parent = [0] * (N + 1) visited = [False] * (N + 1) q = deque([1]) visited[1] = True while q: node = q.popleft() for neighbor in graph[node.. 2025. 3. 7.