728x90
문제
코드
def solution(answers):
answerss = []; answer = []
a = [1,2,3,4,5]; count_a = 0; a_a = 0
b = [2,1,2,3,2,4,2,5]; count_b = 0; b_b = 0
c = [3,3,1,1,2,2,4,4,5,5]; count_c = 0; c_c = 0
for i in range(len(answers)):
if(a[a_a] == answers[i]):
count_a += 1
if(b[b_b] == answers[i]):
count_b += 1
if(c[c_c] == answers[i]):
count_c += 1
a_a += 1
b_b += 1
c_c += 1
if(len(a) == a_a):
a_a = 0
if(len(b) == b_b):
b_b = 0
if(len(c) == c_c):
c_c = 0
answerss.append(count_a)
answerss.append(count_b)
answerss.append(count_c)
if(len(set(answerss)) == 1):
answer = [1,2,3]
elif(len(set(answerss)) == 2):
answer.append(answerss.index(max(answerss))+1)
answerss[answerss.index(max(answerss))] = 0
if(max(answerss) !=0):
answer.append(answerss.index(max(answerss))+1)
else:
answer.append(answerss.index(max(answerss))+1)
return answer
코드풀이
파이썬을 잘 모를 때 풀었던 문제라 무식(?)하게 풀었는지 변수가 많고 코드가 길어보인다. 혹시나 이 문제에 대해 어려움을 겪는 분이 보게 된다면 힌트만 얻어갔으면 좋겠다.
이 문제는 3가지의 답안 마킹 유혀이 있고 정답 배열이 주어진다.
그래서 나는 a, b, c 유형의 답안 마킹 유형을 배열로 선언했고 답안 배열 answers 가 주어졌을 때 answers 의 길이만큼 반복문을 돌려 마킹 유형과 맞으면 count 를 통해 맞힌 개수를 계산하였다.
answers 보다 마킹 유형의 길이가 클 때는 다시 인덱스를 0으로 초기화하며 끝까지 계산을 마쳤다. 그리고 각 마킹 유형을 마친 개수를 중복 체크 하여 최대값을 찾기 시작했다. 만약 모두 중복 시에는 3가지의 유형이 동일한 점수이니 [1,2,3] 을 반환한다. 중복을 제외한 값이 2개라면 최대값을 찾게 되고, 만약 3개라면 가장 큰 최대값을 찾으면 완성한다.
300x250
'코딩코딩' 카테고리의 다른 글
[프로그래머스] level1 - 신규 아이디 추천 : 파이썬(Python) 풀이 (0) | 2021.05.04 |
---|---|
[프로그래머스] level1 - 두 개 뽑아서 더하기 : 파이썬(Python) 풀이 (0) | 2021.04.02 |
[프로그래머스] level1 - 같은 숫자는 싫어 : 파이썬(Python) 풀이 (0) | 2020.12.17 |
[프로그래머스] level1 - 2016년 : 파이썬(Python) 풀이 (0) | 2020.12.16 |
[프로그래머스] level2 - 기능개발 : 파이썬(Python) 풀이 (0) | 2020.11.15 |