새소식

⌨️ Algorithms/프로그래머스

[Python] 프로그래머스 Lv1_모의고사

2022. 7. 31. 22:42

  • -

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

"""
입출력 예시)

answers = [1,2,3,4,5] -> [1]
answers = [1,3,2,4,2] -> [1,2,3]
"""

def solution(answers):
    stu_1 = [1, 2, 3, 4, 5] # 1번 수포자가 찍는 방식
    stu_2 = [2, 1, 2, 3, 2, 4, 2, 5] # 2번 수포자가 찍는 방식
    stu_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] # 3번 수포자가 찍는 방식
    score = [0, 0, 0] # 각 수포자에 대한 점수
    answer = [] # 가장 많은 문제를 맞힌 사람

    for idx, ans in enumerate(answers):
      if ans == stu_1[idx%len(stu_1)]: # idx번째 정답이 1번 수포자의 idx번째 답과 같다면
        score[0] += 1 
      if ans == stu_2[idx%len(stu_2)]: # idx번째 정답이 2번 수포자의 idx번째 답과 같다면
        score[1] += 1
      if ans == stu_3[idx%len(stu_3)]: # idx번째 정답이 3번 수포자의 idx번째 답과 같다면
        score[2] += 1

    for idx, s in enumerate(score):
      if s == max(score):
        answer.append(idx+1) # idx는 0~2까지인데 수포자 번호는 1~3까지라서 idx+1

    return answer

 

 

 


 

  • enumerate() -> 인덱스와 원소를 동시에 접근하면서 루프 돌리기 가능
# enumerate() 

answers = [1,3,2,4,2]
for idx, ans in enumerate(answers):
  print(idx, ans)

"""
idx ans
 0   1
 1   3
 2   2
 3   4
 4   2
"""

 

 

 

  • if ans == stu_2[idx%len(stu_2)] 의 의미
# 'if ans == stu_2[idx%len(stu_2)]:'의 의미

def solution(answers):
    stu_2 = [2, 1, 2, 3, 2, 4, 2, 5] # 2번 수포자가 찍는 방식

    print('len(stu_2):', len(stu_2))
    print('___________________________')
    print()

    for idx, ans in enumerate(answers):
      print('idx:', idx)
      print('ans:', ans)
      print('idx%len(stu_2):', idx%len(stu_2))
      print('stu_2[idx%len(stu_2)]:', stu_2[idx%len(stu_2)])
      print()


answers = [1,2,3,4,5]
solution(answers)


"""
len(stu_2): 8
___________________________

idx: 0
ans: 1
idx%len(stu_2): 0
stu_2[idx%len(stu_2)]: 2

idx: 1
ans: 2
idx%len(stu_2): 1
stu_2[idx%len(stu_2)]: 1

idx: 2
ans: 3
idx%len(stu_2): 2
stu_2[idx%len(stu_2)]: 2

idx: 3
ans: 4
idx%len(stu_2): 3
stu_2[idx%len(stu_2)]: 3

idx: 4
ans: 5
idx%len(stu_2): 4
stu_2[idx%len(stu_2)]: 2
"""

-> idx%len(stu_2) == idx

-> if ans == stu_2[idx%len(stu_2)]: => idx번째 정답이 2번 수포자의 idx번째 답과 같다면

 

  • cf) stu_2[idx%len(stu_2)] 대신 그냥 stu_2[idx]로 짜면 런타임 에러 발생
    • stu_2[idx]가 아니라 stu_2[idx%len(stu_2)]로 쓰는 이유
    • -> 각 수포자들마다 순환주기가 다르니까 각각의 순환주기로 나눠주기 위한 것
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!