Algorithm & Data Structure/문제 풀이
[programmers] 모의고사 (Python)
뭉지(moonz)
2021. 6. 21. 23:01
반응형
링크 : https://programmers.co.kr/learn/courses/30/lessons/42840
문제 (level 1입니다)
분류
- 완전 탐색
생각 정리
- 반복되는 숫자들에 관심을 가지면 안되고, 반복되는 갯수에 관심을 가져야 한다.
- 수포자1은 5개, 수포자2는 8개, 수포자 3은 10개를 반복하므로 문제의 정답과 비교할 때 나머지를 이용한다는 생각을 한다.
- 문제의 정답과 같을 때 맞춘 점수를 ++해주고 두번 째 문제는 return 형식이다.
- 맞춘 점수들 중에서 유일한 최대갯수가 있다면 한 개만 return하지만 동일한 갯수로 맞추었다면 오름차순형태로 모두 보여주는데 숫자로 return해야한다.
- 여기서 오름차순으로 보여줘야한다는 것은 return할 때 [1,2,3..] 이런식이어야한다는 의미이다.
- 세 개중 가장 최고점인 것과 비교하면서 같은 것이 있으면 answer에 추가한다.
전체 코드
def solution(answers):
answer = []
a_cnt, b_cnt, c_cnt = 0, 0, 0
a = [1, 2, 3, 4, 5] # 5개
b = [2, 1, 2, 3, 2, 4, 2, 5] # 8개
c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]# 10개
for i in range(len(answers)):
if a[i%5] == answers[i]: # 5개씩 반복(0,1,2,3,4,0,1,2,3,4..)
a_cnt += 1
if b[i%8] == answers[i]:
b_cnt += 1
if c[i%10] == answers[i]:
c_cnt += 1
rank = [a_cnt, b_cnt, c_cnt]
temp = max(rank) # 같은 갯수의 문제를 맞췄으면 함께 출력
for i in range(len(rank)):
if rank[i] == temp:
answer.append(i+1)
return answer
다른 사람의 풀이
- 하나의 리스트로 연산을 하고, enumerate를 이용하여 접근한 점이 Good
def solution(answers):
answer = []
cnt = [0,0,0]
a = [1, 2, 3, 4, 5] # 5개
b = [2, 1, 2, 3, 2, 4, 2, 5] # 8개
c = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]# 10개
for i in range(len(answers)):
if a[i%5] == answers[i]: # 5개씩 반복(0,1,2,3,4,0,1,2,3,4..)
cnt[0] += 1
if b[i%8] == answers[i]:
cnt[1] += 1
if c[i%10] == answers[i]:
cnt[2] += 1
for idx, count in enumerate(cnt):
if count == max(cnt):
answer.apend(idx+1)
return result
반응형