코딩테스트 연습 - 모의고사(완전탐색)

Gyuhan Park·2021년 7월 10일
0

코딩테스트 정복

목록 보기
7/47

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

수포자 3인방이 각각 다른방식으로 찍었을 때 가장 많은 문제를 맞힌 사람을 구하라.

# 정답코드

가장 많이 맞힌 사람이 1명일 경우만 생각하면 구하기 쉬웠는데 최댓값이 여러개가 되니까 값을 표현하기 까다로웠다. 그래서 검색을 통해 dictionary에서 최댓값 여러개를 구할 수 있는 list comprehension 방식을 사용하였다.

def solution(answers):
    first_member = [1,2,3,4,5] # 5번마다 반복
    second_member = [2,1,2,3,2,4,2,5] # 8번마다 반복
    third_member = [3,3,1,1,2,2,4,4,5,5] # 10번마다 반복

    answer_member = {1:0, 2:0, 3:0}
    idx = 0

    for i in answers:
        if i == first_member[idx % 5]:
            answer_member[1] += 1
        if i == second_member[idx % 8]:  
            answer_member[2] += 1
        if i == third_member[idx % 10]:
            answer_member[3] += 1
        idx += 1

    return [k for k, v in answer_member.items() if max(answer_member.values()) == v]

# 참고코드

구조는 같지만 enumerate를 사용했다는 점이 인상깊다. for문에서 index가 필요할 때 자주 사용하는 것 같은데 매번 까먹는다. 이번에 확실히 기억해야겠다.

def solution(answers):
    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]
    score = [0, 0, 0]
    result = []

    for idx, answer in enumerate(answers):
        if answer == pattern1[idx%len(pattern1)]:
            score[0] += 1
        if answer == pattern2[idx%len(pattern2)]:
            score[1] += 1
        if answer == pattern3[idx%len(pattern3)]:
            score[2] += 1

    for idx, s in enumerate(score):
        if s == max(score):
            result.append(idx+1)

    return result

*dictionary의 value 최댓값의 key 찾기

1. max(), get() 함수 이용

딕셔너리.get(key) : 해당 key에 대한 value 출력
일반적으로 key에 대한 value값을 얻기위해 사용하지만 get함수의 출력값인 value값을 기준으로, 아래 max함수에서는 value값의 최댓값의 key를 출력한다.

2. list comprehension 사용

dictionary에서 가장 큰 value값의 key값을 뽑아낸다.

ex_dic = {'a':1, 'b':2, 'c':3, 'd':3}
print(max(ex_dic, key=ex_dic.get)) # 'c'
print([key for key, value in ex_dic.items() if max(ex_dic.values()) == value]) 
# ['c', 'd']

[차이점]

max() : value의 최댓값 중 맨 앞에 있는 key인 'c' 하나만 출력
list comprehension : value의 최댓값에 대한 모든 key를 출력

[결론]

최댓값 1개 => max()
최댓값 여러개 => list comprehension


*enumerate()

반복문 사용 시 index값이 필요할 때 사용.
enumerate() 는 기본적으로 index와 원소로 이루어진 tuple을 만듦.
index값을 별도로 사용하고 싶으면 인자를 2개로 받음.
시작 index값을 start 옵션을 통해 바꿀 수 있음.

for entry in enumerate(['A', 'B', 'C']): # (0, 'A') (1, 'B') (2, 'C')
	print(entry)
for i, letter in enumerate(['A', 'B', 'C']): # 0 A 1 B 2 C
	print(i, letter)
for i, letter in enumerate(['A', 'B', 'C'], start=1): # 1 A 2 B 3 C
	print(i, letter)    
profile
단단한 프론트엔드 개발자가 되고 싶은

0개의 댓글