23.3.22 TIL

HS L·2023년 3월 22일
1

내일배움캠프

목록 보기
10/73

1.문제

  • 이번주차 개별미션인 코딩테스트 문제를 풀어봄
    코딩테스트

2.시도

  • solution(answers)라는 함수에서 받아올 return값을 answer라 선언하고 그 값을 리스트 형태로 가져오고자 했다.

  • 수포자 1,2,3 각자의 찍기 패턴대로 제출한 답안과 solution에 입력되는 답안지의 값을 하나씩 꺼내와서 비교를 해준 후 정답여부를 체크한다

  • 각자의 정답 개수를 측정하는데 까지는 문제가 없었지만 이 값으로 어떻게 최고점자 리스트를 작성할지가 고민이다..

  • answer를 도출할때 cnt_num의 최대값을 확인한 후 그 값에 해당하는 자를 뽑아오는 방식을 생각했는데 코드가 너무 길어진다... 쎄한느낌에 혹시나 구글링을 본다... 다들.. 짧게 잘 작성하셨구나.. 더 간결하게 짤 방법이 없나 다시 고민해보자

  • 각자의 점수를 가진 묶음을 만들고 그 중 최고점수를 가진 사람들을 뽑아와서 나열해보자!

3.해결

  • 어찌저찌 어거지로 해낸 느낌이긴 하다..
def solution(answers):

    #최종 출력 값(등수 오름차순)
    answer = []

    #찍는 방식 = 수포자 1,2,3 제출답안
    one = [1, 2, 3, 4, 5]
    two = [2, 1, 2, 3, 2, 4, 2, 5]
    three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]

    #맞은 갯수
    cnt_one = 0
    cnt_two = 0
    cnt_three = 0

    #답지를 하나씩 채점했을때 맞은 갯수를 카운트해라
    for i, corr in enumerate(answers):
        if corr == one[i]:
            cnt_one += 1
        if corr == two[i]:
            cnt_two += 1
        if corr == three[i]:
            cnt_three += 1

    #마지막까지 채점했을때 각 학생의 점수 (딕셔너리)
    # '1' = 수포자1,
    # '2' = 수포자2,
    # '3' = 수포자3
    fin_score = {'1': cnt_one, '2': cnt_two, '3': cnt_three}

    #최고점 선출 -> 리스트[딕셔너리?] 형태
    score_max = max(fin_score.values())
    rank1 = [(k, v) for k, v in fin_score.items() if v == score_max]

    #최고점이 동점일 경우 최고점 선출(rank1)을 순차적으로 돌면서 해당 학생을 answer에 추가한다.
    for tmp in rank1:
        answer.append(int(tmp[0]))

    #구하고자 하는 답안
    return answer

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

print(result)
#출력되는 값은 각 학생의 점수 딕셔너리를 오름차순으로 나열해놨기 때문에 오름차순으로 나옴.
#학생의 점수를 다른방식으로 해결해 나가는 경우 필요시 sort 가능성?

함수입력값 3줄 각각 실행시 정상 출력 되는 것을 확인했다.

4.알게된 점

  • 처음 answer를 도출할때 cnt_num의 최대값을 확인한 후 그 값에 해당하는 자를 뽑아오는 방식을 생각했는데 그 과정들을 한방에 해결해줄 코드가 있었다.
    [max]([python] 딕셔너리에서 value가 가장 큰 key 알아내는 방법)
  • 답안 완성하기 전 구글링을 통해 여러가지 답안들을 볼 수 있었다.
    각자 다른 방향으로 문제를 해결한 답안들을 보고나니 코딩의 방향이 꼬이게 된 것도 같다.
    하나의 답을 얻기까지 다양한 방법이 있을 수 있다는걸 이 기회에 몸소 느끼게 됐고 내가 얻고자 하는 답을 얻기 위해서 나만의 코딩방식을 만들고 다듬어 나가는게 중요할 것 같다는 생각이 들었다.
profile
식이

0개의 댓글