BOJ - 2930

주의·2023년 11월 17일
0

boj

목록 보기
5/214

백준 문제 링크
가위 바위 보

❓ 접근법

  1. 상근이의 점수 구하는 건 쉬움
  2. 가능한 모든 순열을 구하기 위해 itertools의 product함수를 사용함
  3. 가위바위보 조건을 이용해 가능한 최대 점수를 구했음

👌🏻 코드

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)

메모리 초과가 안되는 방향으로 잘 짜봐야겠다 😇

0개의 댓글