본문 바로가기
WIL&TIL/TIL

20230321 TIL 연습문제

by 코드뭉치 2023. 3. 21.

콜론(:) 까먹는 버릇 때문에 하루종일 에러가 뜨는 나

 

 

파이썬 기초2 - 프로그래머스 "모의고사" 문제

 

 

* 문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다.

수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

 

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

 

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때,

가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

 

* 제한 조건

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

 

* 입출력 예시

answers
return
[1,2,3,4,5]
[1]
[1,3,2,4,2]
[1,2,3]

 


 

* 풀이

구해야 하는 것 > 가장 많은 문제를 맞힌 사람

> 수포자들의 찍는 방식과 받아오는 답안을 비교 > 정답 시 카운트 up > 카운트가 가장 높은 수포자를 찾기

 

* 찍는 방식!

 

1. 그냥 쓴다! 

   밑에서 돌리면 된다.

def solution(answers):
    case1 = [1, 2, 3, 4, 5]
    case2 = [2, 1, 2, 3, 2, 4, 2, 5]
    case3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
 

2. 함수로? 만든다?

 이건 아닌 것 같아~

 

 

* 정답 비교하기!

 

1. for in range로 (근데 이렇게 할거면 위에 case별로 10000개의 배열을 갖도록 곱해줘야 할 것같다.)

    for i in range (len(answers))       # i를 answers까지 하나씩 ㄱㄱ혓

         if answers[i] == case1[i]:       # 만약 answers의 i번째 요소 == case1의 i번째 요소라면

               cnt[0] += 1                       # cnt의 0번째를 1만큼 올리기

    for i in range(len(answers)):
        if answers[i] == case1[i]:
            cnt[0] += 1
        if answers[i] == case2[i]:
            cnt[1] += 1
        if answers[i] == case3[i]:
            cnt[2] += 1

 

2. enumerate로 

   for i, a in enumerate(answers):         #  answers의 요소와 해당 요소의 인덱스(i)를 반복문에서 사용한다 이말이야

          if a == case1[i % len(case1)]:   #  만약 a == case1의 (i를 (case1의 길이)로 나눈 나머지)번째 요소라면

                cnt[0] += 1                           # cnt 리스트의 [0]번째 값을 1 올린다.

 for i, a in enumerate(answers):
        if a == case1[i % len(case1)]:
            cnt[0] += 1
        if a == case2[i % len(case2)]:
            cnt[1] += 1
        if a == case3[i % len(case3)]:
            cnt[2] += 1

 

* 그래서 1등은?

 

1.   같은 방법으로 하나씩 돌려주면 끝

    answer = []
    for i in range(len(cnt)):
        if cnt[i] == max_cnt:
            answer.append(i+1)

2. 이렇게도 가능

    answer = []

    for i, a in enumerate(cnt):
        if a == max(cnt):
            answer.append(i+1)

3. 이렇게도 가능2 

max_cnt = max(cnt)
answer = [i+1 for i, count in enumerate(cnt) if count == max_cnt]

return answer

 

 

'WIL&TIL > TIL' 카테고리의 다른 글

20230323 TIL - Python 문법 강의, 연습 문제 풀이  (0) 2023.03.23
20230322 TIL - 연습, 문제 위주  (0) 2023.03.22
20230320 TIL - Python 기초 강의  (0) 2023.03.20
20230317 TIL  (0) 2023.03.17
20230316 TIL  (0) 2023.03.16

댓글