반응형

문제설명
https://programmers.co.kr/learn/courses/30/lessons/42840
코딩테스트 연습 - 모의고사
수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는
programmers.co.kr
사고과정
- 완전탐색 문제라고 해서 DFS를 수행해야 하나 싶었지만 DFS를 활용하지 않아도 되었다. 그냥 주어진 찍는 방식 3가지 패턴을 주어진 문제 개수만큼 늘린 후 정답이 일치하는지 선형적으로 탐색하면서 맞은 정답 개수를 세면 되었다.
- % 나누기 연산 기호를 적절히 활용해서 구현할 수 있을 듯 해서 활용했다.
- 문제를 풀은 후, 다른 사람 풀이를 하나 보았는데 인상적인 풀이가 있어서 같이 적어두려고 한다. 동일하게 %연산 기호를 사용했는데 그 분은 나보다 좀 더 실용적이고 간결하게 %기호를 적절히 잘 사용하셨다.
풀이
- 다른 사람의 풀이(권장!)
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
- 나의 풀이
def solution(answers):
first = [1,2,3,4,5]
second = [2,1,2,3,2,4,2,5]
third = [3,3,1,1,2,2,4,4,5,5]
def create_answer(rule):
if len(rule) > len(answers):
rule = rule[:len(answers)]
elif len(answers) // len(rule) == 0:
rule *= len(answers) // len(rule)
else:
rule *= len(answers) // len(rule)
rule += rule[:len(answers) % len(rule)]
return rule
first = create_answer(first)
second = create_answer(second)
third = create_answer(third)
score = [0] * 3
max_score = -1
for idx, result in enumerate([first, second, third]):
cnt = 0
for i in range(len(answers)):
if answers[i] == result[i]:
cnt += 1
score[idx] = cnt
max_score = max(max_score, cnt)
final_res = []
for i in range(3):
if score[i] == max_score:
final_res.append(i+1)
return final_res
반응형
'알고리즘 삽질장' 카테고리의 다른 글
[프로그래머스] 폰켓몬 (0) | 2021.12.07 |
---|---|
[프로그래머스] 체육복 (0) | 2021.12.07 |
[프로그래머스] K번째 수 (0) | 2021.12.07 |
[프로그래머스] 완주하지 못한 선수 (0) | 2021.12.07 |
[프로그래머스] 소수 만들기 (0) | 2021.12.07 |