https://programmers.co.kr/learn/courses/30/lessons/42840
무식해 보여도 사실은 최고의 방법일 때가 있지요.
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):
give_up_1 = [x+1 for x in range(5)]*(len(answers)//5+1)
give_up_2 = [2, 1, 2, 3, 2, 4, 2, 5]*(len(answers)//8+1)
give_up_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]*(len(answers)//10+1)
temp = []
for gu in [give_up_1,give_up_2,give_up_3]:
cnt = 0
for idx,aw in enumerate(answers):
if gu[idx] == aw:
cnt +=1
temp.append(cnt)
rtn = []
for e,tp in enumerate(temp):
if tp == max(temp):
rtn.append(e+1)
return rtn
https://programmers.co.kr/learn/courses/30/lessons/42842?language=python3
[내 풀이]
def solution(brown, yellow):
for i in range(3, brown//2):
for j in range(i):
if 2*(i+j+1)-4 == brown and (i-2)*(j-1) == yellow:
return [i,j+1]
타일 까는 원리를 가로, 세로에서 규칙을 찾아내서 if문으로 확인하는 식.
math 모듈에서 방정식 푸는 알고리즘을 사용할 수 도 있었을 거 같은데,
최대한 모듈 이용 없이 해보았다.
실제로 수학 풀때 곱하기는 항상 점이나 생략하기가 익숙해져서 int callable 오류가 났던 거 같음.
'B > Coding Test' 카테고리의 다른 글
[코딩테스트 연습] - 124 나라의 숫자 (0) | 2021.10.07 |
---|---|
[프로그래머스] DFS/BFS - 단어 변환 (0) | 2021.10.06 |
[코딩테스트] 완전탐색 - 소수 찾기 (0) | 2021.09.30 |
[프로그래머스] 정렬 - 가장 큰 수 (0) | 2021.08.08 |
BFS/DFS (0) | 2021.04.23 |