반응형
프로그래머스 코딩테스트 연습문제 중 완전탐색 모의고사 문제
수포자가 찍는 방법을 반복되게 주어졌다.
1번은 1, 2, 3, 4, 5를 반복하고
2번은 2, 1, 2, 3, 2, 4, 2, 5를 반복
3번은 3, 3, 1, 1, 2, 2, 4, 4, 5, 5를 반복한다.
나는 큐 구조를 만들어 정답지 큐가 비어있기 전까지 1번부터 꺼내어
각각 수포자의 선택과 비교하고, 수포자의 답은 다시 큐에 Append하는 방식을 생각했다.
from collections import deque
def solution(answers):
answer = []
queue = deque(answers)
forgiven_1 = deque([1, 2, 3, 4, 5])
forgiven_2 = deque([2, 1, 2, 3, 2, 4, 2, 5])
forgiven_3 = deque([3, 3, 1, 1, 2, 2, 4, 4, 5, 5])
cnt = [0] * 3
while queue:
res = queue.popleft()
fir = forgiven_1.popleft()
sec = forgiven_2.popleft()
thr = forgiven_3.popleft()
if res == fir:
cnt[0] += 1
if res == sec:
cnt[1] += 1
if res == thr:
cnt[2] += 1
forgiven_1.append(fir)
forgiven_2.append(sec)
forgiven_3.append(thr)
for i in range(len(cnt)):
if cnt[i] == max(cnt):
answer.append(i + 1)
return answer
수포자가 반복되는 것이 있는데, 이를 반복문으로 줄일 수 있을 것 같았다.
from collections import deque
def solution(answers):
answer = []
queue = deque(answers)
forgiven = [
deque([1, 2, 3, 4, 5]),
deque([2, 1, 2, 3, 2, 4, 2, 5]),
deque([3, 3, 1, 1, 2, 2, 4, 4, 5, 5])
]
cnt = [0] * 3
while queue:
res = queue.popleft()
for i in range(len(forgiven)):
tmp = forgiven[i].popleft()
if res == tmp:
cnt[i] += 1
forgiven[i].append(tmp)
for i in range(len(cnt)):
if cnt[i] == max(cnt):
answer.append(i + 1)
return answer
중복되는 부분 반복문으로 처리했다.
'Algorithm' 카테고리의 다른 글
[Java] (0) | 2021.04.19 |
---|---|
[Java] 정렬 알고리즘 (0) | 2021.04.19 |
[Python] 정렬 (0) | 2021.04.04 |
[Python] DFS, BFS (0) | 2021.04.04 |
구현 문제 (0) | 2021.03.27 |