백준 문제 링크
가위 바위 보
- 상근이의 점수 구하는 건 쉬움
- 가능한 모든 순열을 구하기 위해 itertools의 product함수를 사용함
- 가위바위보 조건을 이용해 가능한 최대 점수를 구했음
R = int(input())
user = input()
N = int(input())
y = []
for _ in range(N):
friend = input()
y.append(friend)
from itertools import product
RSP = list('RSP')
x = list(set(product(RSP, repeat = R))) # 가능한 가위바위보 중복순열
score_list = []
user_score = 0
for i in range(len(y)):
for k in range(len(y[i])):
if user[k] == y[i][k]:
user_score += 1
else:
if user[k] == 'S':
if y[i][k] == 'P': user_score += 2
else: user_score += 0
elif user[k] == 'R':
if y[i][k] == 'S': user_score += 2
else: user_score += 0
else:
if y[i][k] == 'R': user_score += 2
else: user_score += 0
for i in range(len(x)):
score = 0
for j in range(len(y)):
for k in range(R):
if x[i][k] == y[j][k]:
score += 1
else:
if x[i][k] == 'S':
if y[j][k] == 'P': score += 2
else: score += 0
elif x[i][k] == 'R':
if y[j][k] == 'S': score += 2
else: score += 0
else:
if y[j][k] == 'R': score += 2
else: score += 0
score_list.append(score)
print(user_score)
print(max(score_list))
그렇지만 위의 코드를 제출하면 메모리초과로 오류가 뜬다 😇
라운드 수가 1부터 50개까지 있어서 product 함수를 쓰기엔 무리였던 것 같다 ...ㅠㅠ 문제를 이해하는 데도 오래 걸려서 시간도 참 많이 걸렸다..
다른 분의 코드는 아래와 같다
r = int(input())
s = input()
n = int(input())
fs = [input() for _ in range(n)]
rsp = {'R':0,'S':1,'P':2}
cs = ms = 0
for i in range(r):
ts = [[0,'R'],[0,'S'],[0,'P']]
for j in range(n):
if (rsp[s[i]] + 1) % 3 == rsp[fs[j][i]]: cs += 2
elif s[i] == fs[j][i]: cs += 1
for t in ts:
if (rsp[t[1]] + 1) % 3 == rsp[fs[j][i]]: t[0] += 2
elif t[1] == fs[j][i]: t[0] += 1
ms += max(ts)[0]
print(cs)
print(ms)
메모리 초과가 안되는 방향으로 잘 짜봐야겠다 😇