문제
나의 풀이
나의 풀이 (1)
- 이기기 위해서는 둘중에 하나는 중복이어야 한다. (1:1, 1:2)
- 이기기 위한 조건을 파악하는 데, 즉 코딩 문제를 파악하는 데 1차 고심...!
- 머리로 생각하면 간단한데, 이걸 코드로 짜면 이리도 오래 걸린다니....! 이것이 현실세계를 코드화하는 것인가! 비록 푸는 데 1시간이 걸렸지만 해결했다!😊
data = input().split()
MS = data[0:2]
TK = data[2:]
dic = {
'R':'P',
'P':'S',
'S':'R'
}
if len(set(MS)) == 1 and len(set(TK)) == 1:
if MS[0] == TK[0]:
print("?")
else:
if dic[MS[0]] in TK:
print("TK")
else:
print("MS")
elif len(set(MS)) == 1 :
if dic[MS[0]] in TK:
print("TK")
else:
print("?")
elif len(set(TK)) == 1:
if dic[TK[0]] in MS:
print("MS")
else:
print("?")
else:
print("?")
나의 풀이 (2)
- 간단하게 작성하려던 나의 코드는 계속해서 틀렸다고 나왔다
- 그 이유는 바로 if문 조건A 안에 if문 조건B! vs. if A and B
- 이 차이가 엄청나다니!!!!!
- if/elif/else는 분기문임에 유의하자!
data = input().split()
MS = list(set(data[0:2]))
TK = list(set(data[2:]))
dic = {
'R':'P',
'P':'S',
'S':'R'
}
if len(MS) == 1 and dic[MS[0]] in TK:
print("TK")
elif len(TK) == 1and dic[TK[0]] in MS:
print("MS")
else:
print("?")
"""
에러가 났던 원래 코드:
if len(MS) == 1:
if dic[MS[0]] in TK:
print("TK")
elif len(TK) == 1:
if dic[TK[0]] in MS:
print("MS")
else:
print("?")
"""
쌤's 풀이
- 조건문이나 "in"을 잘 혼합해서 코드를 의미적으로 짧게 작성해보자
- 딕셔너리를 이용해서 승부테이블을 만들어서 진행해도 ok
- 일일이 조건문을 다 써보면서 풀어도 ok
- 그러나! 파이썬을 쓰는 만큼! 파이썬을 잘 활용하자!
- index, find를 이용하여 효율적으로 쓸 수 있다
- 가위/바위/보와 같이 사이클이 있는 것은 모듈러(%)를 사용하면 좋음!
ML, MR, TL, TR = ('SPR'.index(i) for i in input().split())
# 가위(S), 보(P), 주먹(R)을 숫자로 표현 => S,P,R = 0,1,2
# 한 사람이 같은 것을 냈을 때, 다른 한사람은 이길 수 있는 가능성이 있다
if ML == MR && (ML+2) % 3 in [TL,TR]:
print("TK")
elif TL == TR and (TL+2) % 3 in [ML, MR]:
print("MS")
else:
print("?")
느낀 점
- "ML, MR, TL, TR = ('SPR'.index(i) for i in input().split())" 신박하다!
- 쌤의 코드는 저렇게나 간단하고 직관적인데, 내것은 왜....! ㅠ.ㅠ
- 그래서 간단하고 직관적으로 짜려고 했으나 틀렸다고 나왔던 코드를 리펙터링 하였다.(나의 풀이(2)(
- 계속해서 틀렷다고 나왔던 그 이유는 바로 if문 조건A 안에 if문 조건B! vs. if A and B
- 이 차이가 엄청나다니!!!!! 오늘의 발견! 깨딸음!!!!
- if/elif/else는 분기문임에 유의하자!