코테분석#6-3 두 개의 손 (백준 16675번)

정은경·2020년 3월 16일
0

알고리즘

목록 보기
19/125

문제

나의 풀이

나의 풀이 (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는 분기문임에 유의하자!
profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글