728x90
<문제 링크>
https://programmers.co.kr/learn/courses/30/lessons/42840
<문제 풀이>
- 반복문 사용.
- 패턴을 answers 길이에 맞춤. 문제가 1개~10,000개일 경우 계산
- 채점할 수 있는 변수 필요.
- 가장 많이 맞춘 사람 걸러내기
<코드>
#1차 시도 --> 몇개의 테스트케이스 실패
def solution(answers):
answer = []
a1, a2, a3 = [],[],[]
j=1
for i in answers:
if i==j:
a1.append(i)
if j==6:
j=1
j+=1
j=1
for idx, i in enumerate(answers):
if idx%2==0:
k=2
else:
k=j
j+=1
if i==k:
a2.append(i)
su3 = [3,3,1,1,2,2,4,4,5,5]
if len(answers)>len(su3):
len_ = len(answers) - len(su3)
for a in range(0,len_):
su3.append(su3[a])
for idx, i in enumerate(answers):
if i==su3[idx]:
a3.append(i)
#print("{}{}{}".format(a1,a2,a3))
if len(a1)>len(a2) and len(a1)>len(a3):
answer = [1]
elif len(a2)>len(a1) and len(a2)>len(a3):
answer = [2]
elif len(a3)>len(a1) and len(a3)>len(a2):
answer = [3]
elif len(a1)==len(a2)==len(a3):
answer = [1,2,3]
elif len(a1)==len(a2):
answer = [1,2]
elif len(a1)==len(a3):
answer = [1,3]
elif len(a2)==len(a3):
answer = [2,3]
return answer
#2차 시도 성공
def solution(answers):
answer = []
pattern1 = [1,2,3,4,5]
pattern2 = [2,1,2,3,2,4,2,5]
pattern3 = [3,3,1,1,2,2,4,4,5,5]
cnt = [0,0,0]
pattern1 = pattern1 * (int(len(answers)/len(pattern1))+1)
pattern2 = pattern2 * (int(len(answers)/len(pattern2))+1)
pattern3 = pattern3 * (int(len(answers)/len(pattern3))+1)
for i in range(len(answers)):
if answers[i]==pattern1[i]:
cnt[0] += 1
if answers[i]==pattern2[i]:
cnt[1] += 1
if answers[i]==pattern3[i]:
cnt[2] += 1
for i in range(len(cnt)):
if cnt[i] == max(cnt):
answer.append(i+1)
return answer
<고쳐야 할 점>
- 배열[idx]을 꼭 for문의 idx로 쓸 필요는 없다.
'두두의 알고리즘 > 문제' 카테고리의 다른 글
[이분탐색] 난이도1.5, 이취코 197p '부품 찾기' (Python) (0) | 2021.11.22 |
---|---|
[완전탐색] 프로그래머스 L2 '소수 찾기' (Python) (0) | 2021.11.22 |
[큐] 프로그래머스 L2 '다리를 지나는 트럭' (Python) (0) | 2021.11.22 |
[큐] 프로그래머스 L2 '기능개발' (Python) (0) | 2021.11.22 |
[스택] 프로그래머스 L2 '주식가격' (Python) (0) | 2021.11.22 |