본문 바로가기

CodingTest/Level1

[연습]코딩테스트-모의고사

코딩테스트 연습 문제

  • programmers.co.kr
  • 문제 많이 맞춘사람 맞추기

'''
1번 수포자는 1,2,3,4,5 반복
2번 수포자는 (2,1) (2,3) (2,4) (2,5) 반복
3번 수포자는 (3,3) (1,1) (2,2) (4,4) (5,5) 반복
'''
def makeAnswer(answer):
    answer1 = []
    answer2 = []
    answer3 = []
    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]

    idx1 =0
    idx2 = 0
    idx3 =0

    for a in range(len(answer)):
        if idx1 > len(pattern1)-1:
            idx1 = 0
        answer1.append(pattern1[idx1])
        idx1 +=1

    for a in range(len(answer)):
        if idx2 > len(pattern2)-1:
            idx2 = 0
        answer2.append(pattern2[idx2])
        idx2 +=1

    for a in range(len(answer)):
        if idx3 > len(pattern3)-1:
            idx3 = 0
        answer3.append(pattern3[idx3])
        idx3 +=1

    return answer1, answer2, answer3

def check_answer(answer,a,b,c):
    answer_count = [0,0,0]

    for i, j in zip(answer, a):
        if i == j:
            answer_count[0] +=1

    for i, j in zip(answer, b):
        if i == j:
            answer_count[1] +=1

    for i, j in zip(answer, c):
        if i == j:
            answer_count[2] +=1    

    max_answer_count = max(answer_count)

    cnt =1
    result = []
    for x in answer_count:
        if x == max_answer_count:
            result += [cnt]
        cnt+=1


    result.sort()
    return result

def solution(answers):
    a, b, c = makeAnswer(answers)
    answer = check_answer(answers,a,b,c)

    return answer

순환주기를 idx로 일일이 하나씩 초기화하면서 했는데 원형큐를 생각하긴했는데 적용을 안해버림.
그냥 각 주기별로 나눠주면 코드가 훨씬 간결해졌을텐데...

또, for문 돌때, range가 아닌, enumerate를 사용하는것도 이 문제에서는 좋은 해답이였음.

enumerate는 리스트의 index, value를 반환해줌.

반응형