[백준] 2930번 - 가위 바위 보
문제
문제 설명 및 풀이
문제를 잘 읽는 것도 중요하다는 것을 또 한번 느끼게 된 문제이다…
상근이는 일대일 가위 바위 보를 절대 지지 않아서 세계 대회에 나가게 된 그런 스토리로 이해했는데 그게 아니라 진짜 1대1은 지지 않는 녀석이었다.
또한 개개인을 독립적으로 비교하기 때문에 각각의 경우를 모두 구해 최댓값을 취해주어야 한다.
구현 상에서 새로 배운 점 또한 있다.
친구들의 가위바위보 리스트를 입력받고 새로운 리스트에 append하면서 만들어 주었을텐데 input() for _ in range(n)으로 n만큼 문자열을 입력받아서 list로 만들어 줄 수 있었다.
또한, 딕셔너리 구조를 사용해서 R-S-P간의 관계를 쉽게 구해줄 수 있었다.
나의 코드
num = int(input())
s = input()
friends = int(input())
fs = [input() for _ in range(friends)]
rsp = {'R':0,'S':1,'P':2}
honesty = 0
maxAns = 0
# 정직한 가위바위보
for i in range(num):
ts = [[0, 'R'], [0, 'S'], [0, 'P']]
for j in range(friends):
if (rsp[s[i]] + 1) % 3 == rsp[fs[j][i]]:
honesty += 2
elif s[i] == fs[j][i]:
honesty += 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
maxAns += max(ts)[0]
print(honesty)
print(maxAns)