코딩테스트
-
[Python] 코드 트리 / 루돌프의 반란코딩테스트 2024. 10. 12. 23:09
문제링크 특별한 기교가 있는 풀이는 아니고, 그냥 하라는 대로 한 코드.import sysimport heapqinput = sys.stdin.readlineclass Santa: def __init__(self, number, x, y, N): self.number = number self.x = x self.y = y self.score = 0 self.active = True self.stuned = 0 self.distance_to_rudolf = None self.N = N def __lt__(self, other): if self.distance_to_rudolf != o..
-
[Python] 코드트리 / 고대 문명 유적 탐사코딩테스트 2024. 10. 11. 19:01
문제 링크 큰 행렬 내에서 작은 행렬을 도려내서 돌리고 전치하고 하는 것은 숙달해놓고 있지 않으면, 실전에서 당황하기 쉬우므로, 어느정도 외워놓는 것이 좋다. 이 문제에서 활용했던 코드는 아래와 같다: def _rotate(self, angle): matrix = [row[self.y:self.y+3] for row in self.graph[self.x:self.x+3]] if angle == 90: #시계방향 return [list(row[::-1]) for row in zip(*matrix)] elif angle == 180: return [row[::-1] for row in matrix[::-1]] el..
-
[Python] 코드트리 / 코드트리 투어코딩테스트 2024. 10. 9. 21:30
문제 링크 객체를 heapq로 관리하려면...진짜 도저히 안 풀려서 정답 코드를 참고하였다. 즉, 밑에 작성할 풀이 코드는 정답 코드에서 상당 부분을 참고했음을 밝힌다. 실전 코테에서 class로 객체를 선언해서 문제를 푸는 것은, 사실 실현하기는 어려울 것이다. 어지간히 능숙하지 않고서야 더 헷갈리기 마련이니까. 하지만, 조금이라도 시간복잡도 갖고 장난치는 문제를 만나면 객체를 선언하는 방법 말고는 없을 때가 있다. 그런데 문제가 있었다. 나는 지금까지 객체를 heapq로 관리할 줄 몰랐어서 heapq를 사용해야 할 때면 객체 사용을 포기하고는 했다. 그런데 정답 코드를 공부하면서 객체를 heapq로 관리할 수 있는 방법을 터득하였다!class Package: def __init__(self, ..
-
[Python] 코드트리 / 마법의 숲 탐색 (라이브러리 안 쓴 풀이)코딩테스트 2024. 10. 9. 14:44
문제 링크 문제 풀이 전략 문제 설명이 약간은 모호하게 되어있어서, 솔직히 실전 코딩테스트였으면 많이 당황스러웠을 것 같다.골렘 한 대 안착정령 이동그 다음 골렘 안착정령 이동...을 반복하는 것인지,골렘 한 대 안착그 다음 골렘 안착... 그렇게 해서 모든 골렘이 안착그 이후에 정령이 이동하기 시작을 반복하는 것인지 조금 헷갈리기는 하는데, 어느 골렘의 일부분이라도 숲 밖으로 벗어나면 숲 내 골렘이 전부 숲 밖으로 나가야 하므로 전자라고 해석하는 것이 타당하다. 코드트리 공식 풀이에는 BFS를 이용한다. 나도 BFS를 이용하기는 했는데, 이게 조금은 더 효율적인 풀이라고 생각한다. 이렇게 딕셔너리에 골렘의 중간 좌표와 출구 방향을 정해가면서, 동시에 딕셔너리에 추가할 때마다 탐색을 진행해야 한다. ..
-
[Python] 코드트리 / 색깔 트리 (라이브러리 안 쓴 풀이)코딩테스트 2024. 10. 8. 19:00
문제 링크 정답 코드구현. 구현. 빡구현.. 중요한 건 아니지만, Class 내에서 함수를 선언할 때, 단일밑줄(_)을 앞에 붙이면 관례적으로 Class 내부용 함수를 의미한다. 관례일 뿐이므로 여전히 Class 외부에서 호출이 가능하다. 이중밑줄(__)을 앞에 붙이면 이름이 맹글링(mangling)되어 외부에서 접근하려면 Class 이름을 앞에 붙여야 해서 접근이 어려워지지만 여전히 접근이 가능은 하다. 즉, C++, Java와 같이 진정으로 protected, private void가 아니다.n = int(input())orders = []nodes = {}for _ in range(n) : orders.append(list(map(int, input().split())))class Node :..
-
[Python] 프로그래머스 / 월간 코드 챌린지 시즌2 / 모두 0으로 만들기코딩테스트 2024. 10. 6. 12:11
문제 링크 DFS에서 이따금씩 쓰이는 nonlocal 선언def outer(): x = 10 def inner(): x += 5 inner() print(x) outer()"""---------------------------------------------------------------------------UnboundLocalError Traceback (most recent call last) in ()----> 1 outer()1 frames in inner() 4 def inner(): 5 #nonlocal x # 바깥 함수의 x 변수에 접근----> 6 ..
-
[Python] 프로그래머스 / 2019 KAKAO BLIND RECRUITMENT / 블록 게임코딩테스트 2024. 10. 5. 20:36
문제 링크 와... 이거 어렵고 재밌었다. 실전 코테에서 이런 그림이 뜨게 된다면 머릿속에 큰일났다는 생각 말고는 들지 않을 것이다. 하지만 차근차근 하다보면 어렵지 않다. 일단 위에서 블록을 떨어뜨려서 직사각형을 만들 수 있는 건 위의 다섯 개 밖에 없다. 이들은첫 번째 줄에 하나, 두 번째 줄에 하나, 세 번째 줄에 두 개첫 번째 줄에 하나, 세 번째 줄에 세 개중에 하나이다. 풀이 방법일단 문제에 제시된 예시를 살펴보자. 첫 번째로는 우선, Counter를 이용해서 각 행에 적힌 숫자를 세는 것이다.Counter를 이용하는 이유는 참조를 빠르고 효율적으로 할 수 있기 때문이다. 저 Counter들은 리스트에 저장한다. 그 다음으로는, 리스트에 저장된 Counter를 분석한다. 맨 위에있는 "가능할..
-
[Python] 프로그래머스 / 단어퍼즐코딩테스트 2024. 10. 5. 09:26
문제 링크 정답 코드def solution(strs, t): word_set = set(strs) N = len(t) dp = [float('inf')] * (N + 1) dp[0] = 0 t = '_' + t for idx in range(1, N + 1): for j in range(1, 6): if idx - j >= 0 and t[idx - j+1:idx+1] in word_set: dp[idx] = min(dp[idx], dp[idx - j] + 1) return dp[-1] if dp[-1] != float('inf') else -1