Programmers CodeChallenge
코드챌린지 링크
💻20250208 (Lv.1~3)
1. 유연근무제 (Lv.1)
388351
구현
• 시간이 100 단위기 때문에 60 단위로 다시 바꿔주어야 한다.
• startday로 현재 요일을 알아낸 후에 주말이면 건너뛴다.
2. 비밀 코드 해독 (Lv.2)
388352
조합
• 5개 숫자 조합을 만든다.
• 그 조합과 q[i]의 합집합 개수가 10-ans[i]와 한 번이라도 다르면 정답 후보가 될 수 없으므로 False를 return한다.
3. 지게차와 크레인 (Lv.2)
388353
BFS
• air는 매번 arr의 결과를 deepcopy한 배열이다.
• "."는 외부 빈칸, "*"는 내부 빈칸이다.
• "."에서 BFS를 돌렸을 때 "*"를 만나면 이 칸도 이제는 외부인 것이므로 "."으로 변경해준다.
• air에서 주변에 "."이 있다면 해당 알파벳도 외부이므로 "."으로 변경한다.
• air에서 주변에 "."이 없었다면(f==0) 크레인인지 확인하고 크레인이면 내부 칸도 꺼낼 수 있으므로 "*"으로 변경한다.
4. 홀짝트리 (Lv.3)
388354
DFS
• dfs 함수에서 result는 특정 노드가 속해있는 트리의 노드들이다.
• root는 특정 노드가 root일 때 0이면 홀짝노드, 1이면 역홀짝노드임을 나타낸다.
※ 특정 노드가 root일 때 홀짝노드이면 root가 아닐 때는 무조건 역홀짝노드이다.
• root가 0인 것의 개수와 1인 것의 개수를 모두 구한 후 0이 1개라면 홀짝트리, 1이 1개라면 역홀짝트리로 정의한다.
• 그 이유는 root 홀짝노드가 1개이면 그 노드가 루트일 때, 나머지 노드들의 루트 값은 역홀짝노드이므로 루트가 아니면 홀짝노드가 되기 때문이다.

이 사진 예시일 때 노드
와 root[노드]
를 출력하면 아래와 같이 나온다.
3: 루트일 때 홀짝노드
4, 6, 2: 루트일 때 역홀짝노드
이때 3이 루트가 되면 4, 6, 2도 모두 홀짝 노드가 되므로 이는 홀짝트리이다.
💻20250211 (Lv.1~3)
1. 택배 상자 꺼내기 (Lv.1)
389478
조합
사진은 밑에서 위로 가지만 계산 편의상 arr는 위에서부터 시작한다. 또 배열 개수를 똑같게 하기 위해 22개까지만 있어도 아래처럼 24개까지 배열을 만든다.
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 16 17 18
24 23 22 21 20 19
행을 키우면서 n보다 작은 값이면 정답에 추가한다.
2. 서버 증설 횟수 (Lv.2)
389479
시뮬레이션
• answer에는 서버의 운영 시간을 넣고, 한 시간이 지날 때마다 모든 서버의 운영 시간을 1씩 줄인다.
• 한 턴이 지나면 answer를 먼저 줄인 후 남은 서버의 수를 센다.
• 남은 서버 수 보다 필요한 서버 수가 크면 서버를 추가한다.
3. 완전범죄 (Lv.2)
389480
DP+BFS
• nxm dp 배열을 만든다. dp[2][3]=2이면 2번째 물건까지 훔쳤을 때 A의 흔적은 2이고, B의 흔적은 3이라는 뜻이다.
• x와 y에 info[i]를 더하면서 BFS를 돈다. 이때 nx는 A가 훔치는 것이고, ny는 B가 훔치는 것이다.
• dp에는 i+1를 저장하고 A가 최소여야 하므로 마지막까지 다 훔쳤을 때 가장 작은 행에 위치한 것이 정답이다.
[예제 1] dp 결과 출력
0 0 1 0
1 0 0 2
0 0 2 3 -> 가장 작은 행에 위치한 3이다.
2 3 0 3
4. 봉인된 주문 (Lv.3)
389481
수학
• 알파벳을 활용한 26진법이라고 생각하면 된다. 다만 나머지 연산을 했을 때 0이 "a"이고 25가 "z"이므로 나머지 연산 전에 n을 1 빼준 후 계산한다.
• answer 초깃값은 n과 bans의 길이 합이다.
• bans를 돌면서 answer보다 큰 것의 개수를 세서 prev와 같은지 확인한다.
• 그 이유는 answer를 변경했을 때 답이 달라질 수 있기 때문이다.
• cnt와 prev 값이 같을 때까지 answer를 변경해가며 계산을 한다.
예를 들어 n은 2이고, bans는 ["a", "b", "e", "f"]일 때 answer는 f -> e -> d 순서로 변하게 된다.
n = 2, bans = [“a”, “b”, “e”, “f”] 일 때,
answer, prev, cnt 출력 결과
answer: f prev: -1 cnt: 1
answer: e prev: 1 cnt: 2
answer: d prev: 2 cnt: 2
댓글남기기