-
[프로그래머스] Lv1. 모의고사 , PythonShare/Pyhton 2021. 4. 9. 14:32
문제
알고리즘
완전 탐색
- a,b,c 별로 순차적으로 비교해볼 정답을 리스트로 선언해놓는다.
- 정답 리스트와 i값을 증가시켜가며 순차적으로 비교한다
- 리스트 길이가 다르므로 모드연산으로 체크한다.
- 일치하면 각각 cnt값을 증가시킨다.
- (사실 리스트를 하나 더만들어서 append 하는 방법이 더 낫지만, 하다보니 그냥...)
- 최대값의 index 값을 알기위해서는 enumrate 함수를 사용해서 index 를 알아낸다.
- 출력 한다.
나의코드
def solution(answers): print(answers) a = [1,2,3,4,5] b = [2,1,2,3,2,4,2,5] c = [3,3,1,1,2,2,4,4,5,5] cntA =0 cntB =0 cntC =0 result = [] max_idx = None tmp = [] for i in range(len(a)): # print(i) if(a[i] == answers[i]): cntA+=1 for i in range(len(b)): # print(i) if(b[i] == (answers[i%(len(answers))])): cntB+=1 for i in range(len(c)): # print(i) if(c[i] == (answers[i%(len(answers))])): cntC+=1 print(cntA) print(cntB) print(cntC) tmp.append(cntA) tmp.append(cntB) tmp.append(cntC) print(tmp) for idx, num in enumerate(tmp): if num == max(tmp): result.append(idx+1) print("idx",result) solution([1,2,3,4,5])
다른 코드
def solution(answers): p = [[1, 2, 3, 4, 5], [2, 1, 2, 3, 2, 4, 2, 5], [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]] s = [0] * len(p) for q, a in enumerate(answers): for i, v in enumerate(p): if a == v[q % len(v)]: s[i] += 1 return [i + 1 for i, v in enumerate(s) if v == max(s)]
다른코드도 비슷한 패턴이었는데, 이분의 코드는 더 간결하게 잘 작성한것 같다.
첫번째 for문에서 q는 0 1 2 3 4 5 이렇게 인덱스가 증가할 테고, 두번째 for 문에서 5,6,7 길이가 초과 되는 애들만
다시 돌리는 경운데... 변수명이 너무가독성이 떨어져서 아쉽다.
결국 나머지 연산으로 루프 두개 돌려서 count 를 올리고 (여기서는 s) 그 요소를 최종출력한다.
느낀점
파이썬은 정말 많은 함수를 제공해서 편하기도 한데, 아직은 익숙치가 않아서 오히려 답답한 부분이 있다.
for문에서 두개씩돌리고 하는건 참 파이썬이 강력하게 만들어놨구나 하는 생각도 들고
'Share > Pyhton' 카테고리의 다른 글
[프로그래머스] Lv1. 문자열 내 마음대로 정렬하기 (0) 2021.04.15 [프로그래머스] Lv1. 문자열 내 p와 y의 개수 (0) 2021.04.15 [프로그래머스] Lv1.3진법 뒤집기 (0) 2021.04.13 [프로그래머스] Lv1. 같은 숫자는 싫어 (0) 2021.04.08 [프로그래머스] Lv1. 완주하지 못한 선수 (0) 2021.04.07