코딩 테스트/Level 3
-
프로그래머스 / 리틀 프렌즈 사천성코딩 테스트/Level 3 2023. 3. 5. 22:03
https://school.programmers.co.kr/learn/courses/30/lessons/1836 자바 1. Sort를 해야하니 TreeMap을 이용하자. 2. 길을 찾을 때 ㄱ 방향, ㄴ 방향을 고려해야 한다. 3. 구현 문제다. import java.util.*; class Solution { char[][] board; public String solution(int m, int n, String[] board) { this.board = new char[m][n]; var pairs = new TreeMap(); for (var i = 0; i < m; i++) for (var j = 0; j < n; j++) { var temp = board[i].charAt(j); this.bo..
-
프로그래머스 / 예선캠핑코딩 테스트/Level 3 2023. 3. 5. 13:15
https://school.programmers.co.kr/learn/courses/30/lessons/1833 1. 누적합을 2차원으로 이용한다. (일종의 DP) 2. 좌표를 그대로 쓰면 불필요하게 넓은 공간을 사용해야 한다. 2^31-1 개의 공간에 5000개의 좌표. 파이썬 from itertools import combinations def solution(n, data): # x좌표 추출 -> 정렬 후 인덱스를 붙인 뒤 '값: 인덱스'로 딕셔너리에 저장, # 값으로 인덱스를 찾을 수 있도록 한다. y 좌표들도 마찬가지... x_dic = {x: i for i, x in enumerate(sorted({each[0] for each in data}))} y_dic = {y: i for i, y i..
-
프로그래머스 / 연속 펄스 부분 수열의 합코딩 테스트/Level 3 2023. 3. 4. 10:33
https://school.programmers.co.kr/learn/courses/30/lessons/161988 문제를 보면 바로 누적합(cumulative sum, prefix sum)이 떠오른다. 조금 더 생각해 보자. 최솟값, 최댓값에도 누적을 사용하면 어떨까? 레벨3치곤 쉬운데... 파이썬 혹시 이게 될까 했는데 되네. 바다코끼리 연산자~! 대박.. from itertools import cycle, chain from functools import reduce def solution(sequence): temp1, temp2, temp3 = 0, 100000, -100000 s_cum = tuple(chain((0,), (temp1 := temp1 + each1 * each2 for each..
-
인사고과코딩 테스트/Level 3 2023. 1. 20. 15:15
https://school.programmers.co.kr/learn/courses/30/lessons/152995 def solution(scores): wh_sum = sum(scores[0]) max_s1 = answer = 0 for s in sorted(scores, key=lambda x: (-x[0], x[1])): if max_s1 wh_sum: answer += 1 elif s == scores[0]: return -1 return answer + 1 테스트 1 〉통과 (0.00ms, 10.2MB) 테스트 2 〉통과 (0.01ms, 10.2MB) 테스트 3 〉통과 (0.01ms, 10.2MB) 테스트 4 〉통과 (0.01ms, 10.1MB) 테스트 5 〉통과 (0.01ms, 10.1MB)..
-
2023 KAKAO BLIND RECRUITMENT - 표 병합코딩 테스트/Level 3 2023. 1. 8. 20:03
https://school.programmers.co.kr/learn/courses/30/lessons/150366 단순하게 리스트로 머지 상태를 관리했다. def solution(commands): def rc2index(r, c): return (int(r) - 1) * 50 + int(c) - 1 def update(p, s): old_state = states[p] for index in range(length): if states[index] == old_state: table[index] = s def replace(s1, s2): for index in range(length): if table[index] == s1: table[index] = s2 def merge(p1, p2): cha..
-
2023 KAKAO BLIND RECRUITMENT - 표현 가능한 이진트리코딩 테스트/Level 3 2023. 1. 8. 01:57
https://school.programmers.co.kr/learn/courses/30/lessons/150367 포화 이진 트리: 트리내 요소의 개수 = 2 ** n - 1 '0' 노드의 아래 노드는 모두 '0'이어야 한다. def solution(numbers): def is_tree(s, parent): if parent == '0' and not all(child == '0' for child in s): return False if len(s) == 1: return True return is_tree(s[:(center := len(s) // 2)], s[center]) and is_tree(s[center + 1:], s[center]) def to_bin(num): s = bin(num)..
-
2023 KAKAO BLIND RECRUITMENT - 미로 탈출 명령어코딩 테스트/Level 3 2023. 1. 6. 00:40
https://school.programmers.co.kr/learn/courses/30/lessons/150365 DFS. 스택으로 풀었다. 방향은 dlru 순으로 확인해야 한다. 스택은 마지막 입력한 것부터 pop 하기 때문에... 아래 코드와 같은 순서를.... 중간에 최소 거리가 남은 거리 보다 큰 경우, 홀짝이 안 맞는 경우는 가지치기를 했다. def solution(n, m, x, y, r, c, k): stack = [(x, y, [])] result = 'impossible' while stack: x_pos, y_pos, path = stack.pop() if len(path) == k and (x_pos, y_pos) == (r, c): result = ''.join(path) brea..
-
고고학 최고의 발견코딩 테스트/Level 3 2022. 12. 11. 22:03
https://school.programmers.co.kr/learn/courses/30/lessons/131702 고고학 최고의 발견 연습문제 Lv. 3 62명 4% 요약 첫 번째 줄이 결정되면, 두 번째 줄도 1가지 케이스로 결정된다. 첫 번째 줄의 모든 케이스를 전수조사(BF)한다. 꽤 힘들게 풀었다 ㅠ,.ㅠ 레벨 3 맞음? 첫 줄이 결정되면 다음 줄의 답도 결정된다. (상하좌우 방향은 관계 없다.) 첫 줄이 3, 0, 3, 0 으로 결정되어 있다면 다음 줄은 1, 0, 1, 0 회전하는 케이스만 존재한다. 그럼 첫 줄은 어떻게 결정할까? 첫 줄과 두 번째 줄은 서로 영향을 주기 때문에.. 복잡한 문제다. 첫 줄을 3, 3, 3, 0 에서 1번 턴을 해서 0, 0, 0, 0 으로 만들었더라도 두 번..