1. 접근 방식
1.
수포자 3명의 답안을 주어지는 배열의 길이와 맞춰준다
2.
주어진 배열과 3명의 답안 배열을 비교해서, 값이 같으면 count해 새로운 배열에 넣는다
3.
새로운 배열에서 최대값을 갖는 인덱스 값을 최종 배열에 넣는다
2. 기본 코드에 대한 설명
def solution(answers): #[1,2,3,4,5]
result = []
array1 = [1,2,3,4,5]
array2 = [2,1,2,3,2,4,2,5]
array3 = [3,3,1,1,2,2,4,4,5,5]
# 길이 맞춰주기 (몫만큼 곱해서 반복하고, 나머지 더해주기)
a = array1 * (len(answers)//len(array1)) + array1[:(len(answers) % len(array1))]
b = array2 * (len(answers)//len(array2)) + array2[:(len(answers) % len(array2))]
c = array3 * (len(answers)//len(array3)) + array3[:(len(answers) % len(array3))]
# 각 배열을 answers과 비교해서, 값이 같으면 count
score = [0, 0, 0]
for i in range(len(answers)):
if a[i] == answers[i]:
score[0] += 1
if b[i] == answers[i]:
score[1] += 1
if c[i] == answers[i]:
score[2] += 1
# score = [5,0,0]
# answers = [1,2,3,4,5]
# (코드 참고) : 최대값 새로운 배열에 넣어 반환
for k in range(len(score)):
if max(score) == score[k]:
result.append(k+1) # 수포자 이름 = 1,2,3이라 index + 1
return result
Python
복사
3. 추가적으로 개선한 코드에 대한 설명
•
개선 아이디어 : for문을 돌리는 다양한 방법
1.
내장 함수 enumerate() 참고
a.
인덱스와 원소로 이루어진 tuple 생성
b.
인자로 넘어온 목록을 기준으로 인덱스와 원소를 차례대로 접근하게 해주는 반복자(iterator) 객체를 반환해주는 함수
for entry in enumerate(['A', 'B', 'C']):
... print(entry)
...
(0, 'A')
(1, 'B')
(2, 'C')
# 원리 : next()의 반복.
list(enumerate(['A', 'B', 'C']))
[(0, 'A'), (1, 'B'), (2, 'C')]`
Python
복사
2.
리스트 컴프리핸션(list comprehension) 참고
a.
리스트 내부에 코드를 작성하는 방식
b.
조건을 걸 때는 for문 앞에 반복되는 변수를 넣음
c.
for, if 모두 중복 작성 가능
#1. 기본형
numbers = []
for n in range(1, 10+1):
numbers.append(n)
>>> [x for x in range(10)]
#2. 짝수뽑기
even_numbers = []
for n in range(1, 10+1):
if n % 2 == 0:
even_numbers.append(n)
>>> [ 2*x for x in range(1, 10+1) ] # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Python
복사
4. 사용 라이브러리 정리
-
5. 기타(문제 풀이에 어려웠던 점, 구현하고자 했는데 실패한 방식)
ex) 이 방식으로 접근했는데 구현이 힘들어서 개선했습니다. 그 방식으로 접근했는데 접근방식이 잘못되었다는 것을 깨닫고 다시 풀었습니다.