728x90
SMALL
완전탐색 문제
https://school.programmers.co.kr/learn/courses/30/lessons/42840
💡 풀이코드 (성공 - 내코드)
def brute_forth(l, ans):
a = []
b = []
c = []
num1 = [1, 2, 3, 4, 5]
num2 = [1, 2, 3, 4]
num3 = [3, 1, 2, 4, 5]
cnt = [[0,1], [0,2], [0,3]]
# 1번
for i in range(l // 5 + 1):
if len(a) == l: break
for j in range(1, 6):
a.append(j)
if ans[len(a)-1] == a[len(a)-1]: cnt[0][0] += 1
if len(a) == l: break
# 2번
for i in range(l // 8 + 1):
if len(b) == l: break
for idx, j in enumerate(num2):
b.append(2)
if ans[len(b)-1] == b[len(b)-1]: cnt[1][0] += 1
if len(b) == l: break
# if i * 8 + idx == l: break
if j == 1:
b.append(j)
else:
b.append(j + 1)
if ans[len(b)-1] == b[len(b)-1]: cnt[1][0] += 1
if len(b) == l: break
# 3번
for i in range(l // 10 + 1):
if len(c) == l: break
for j in num3:
c.append(j)
if ans[len(c)-1] == c[len(c)-1]: cnt[2][0] += 1
if len(c) == l: break
c.append(j)
if ans[len(c)-1] == c[len(c)-1]: cnt[2][0] += 1
if len(c) == l: break
cnt.sort(reverse=True)
print(cnt)
maxNum = max(cnt, key = lambda x:x[0])[0]
ret = []
for i in range(3):
if maxNum == cnt[i][0]:
ret.append(cnt[i][1])
print(ret)
return sorted(ret)
def solution(answers):
answer = []
answerss = answers
answer = brute_forth(len(answers), answerss)
return answer
더럽게 짰다 ....
짚고 넘어갈 Point
- tuple은 값 변경이 불가능하므로 2차원 리스트 사용
- 2차원 리스트에서 첫번째 열 기준으로 가장 큰 값을 뽑기 위해 lambda 사용
maxNum = max(cnt, key = lambda x:x[0])[0]
다른 사람 풀이
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]
resullt = []
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
참고 문헌
728x90
LIST
'Algorithm > Simulation' 카테고리의 다른 글
[백준] 1913 : 달팽이 (파이썬) (0) | 2024.08.24 |
---|---|
[백준] 13460 : 구슬 탈출 2 (파이썬) (0) | 2024.08.02 |