250x250
Notice
Recent Posts
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
관리 메뉴

일상 코딩

[python] 백준 16675번 두 개의 손, 모듈러 연산 풀이 본문

코딩테스트/백준 online Judge

[python] 백준 16675번 두 개의 손, 모듈러 연산 풀이

polarcompass 2021. 10. 16. 03:41
728x90

https://www.acmicpc.net/problem/16675

 

16675번: 두 개의 손

첫 번째 줄에 차례로 ML, MR, TL, TR이 공백으로 구분되어 주어진다. 차례대로 민성이의 왼손과 오른손, 태경이의 왼손과 오른손의 상태를 나타낸다. 위 4개의 값들은 “S”, “R”, “P” 중 하나이

www.acmicpc.net

ML, MR, TL, TR = map(lambda x:"SPR".find(x), input().split())

def lose_case(x):
    return (x+2)%3

if ML == MR and lose_case(ML) in [TL,TR]:
    print("TK")
elif TL == TR and lose_case(TL) in [ML,MR]:
    print("MS")
else:
    print("?")

입력예시 1

R S P R

출력예시1

?

입력예시 2

R R S S

출력예시2

MS

입력예시 3

P P S R

출력예시3

TK

 


"SPR"

string 타입으로 SPR을 만들고, 입력이 들어오면 index(), find() 함수로 index를 반환 받는다.

"SPR".index()
"SPR".find()

여기서 상대방이 지는 패를 모듈러 연산으로 알아낸 후 이 값이 내가 가진 패에 있는지 판단하면 끝나는 간단한 문제이다.

나의 패 연산 내가 지는 패
Scissor(가위) 0 (index) (0 + 2) % 3 2 Rock(바위)
Paper(보) 1 (1 + 2) % 3 0 Scissor(가위)
Rock(바위) 2 (2 + 2) % 3 1 Paper(보)
def lose_case(x):
    return (x+2)%3

if ML == MR and lose_case(ML) in [TL,TR]:
    print("TK")

위 코드를 해석하면,

상대면, MS의 양손이 같은 패일때,

이를 lose_case() 함수에 넣어서 지는 패가 상대방 리스트(상대방패)에 있을 경우,

승자는 TK가 된다는 의미이다.

728x90