코테분석#6-2 주사위 네개 (백준 2484번)

정은경·2020년 3월 16일
0

알고리즘

목록 보기
18/125

문제


나의 풀이

import sys
count = int(input().strip())
# print(count)

rlt = []
for i in range(count):
    nums = sorted(list(map(int, sys.stdin.readline().strip().split())))
    # print(nums)
    new_nums = sorted(list(set(nums)))

    # 1. 같은 눈 4
    if len(new_nums) == 1:
        rlt.append(50000 + new_nums[0]*5000)

    # 2. 같은 눈 3개 [1,1,1,2], [1,2,2,2]
    # 3. 같은 눈 2개가씩 두쌍 [1,1,2,2]
    elif len(new_nums) == 2:
        if nums[1] == nums[2]:
            rlt.append(10000 + nums[1]*1000)
        elif nums[1] != nums[2]:
            rlt.append(2000 + nums[0]*500 + nums[-1]*500)

    # 4. 같은 눈이 2개만 [1,1,2,3], [1,2,2,3], [1,2,3,3]
    elif len(new_nums) == 3:
        for i in new_nums:
            if nums.count(i) == 2:
                rlt.append(1000 + i*100)
                break

    # 5. 모두 다른 눈
    elif len(new_nums) == 4:
        rlt.append(new_nums[-1]*100)

print(max(rlt))

쌤's 풀이

  • 원소의 개수/중복을 카운팅 할 때 'set'를 적극 사용하자
  • 코딩테스트에서 결과가 틀렸을 때! 어떤 부분이 틀렸는지를 잘 파악해야 한다!
  • 어떤 부분이 틀렸는지를 캐치하는 방법은! 문제의 조건에 따라서 내가 작성한 코드가 그것을 그대로 구현허였는 지를 읽어나가는 것이 중요!
  • 예외처리를 잘 하는 것이 중요!
def money():
	list = sorted(list(map(int,input().split())))
    
    # 숫자 4개가 모두 같은 번호
    if len(set(list)) == 1:
    	return lst[0] * 5000 + 5000
    
    # 숫자 4개 중 같은 번호가 2개
    # [1,1,2,2], [1,1,1,2]
    if len(set(lst)) == 2:
    	if lst[1] == lst[2]:
        	return 10000 + list[1] * 1000
        else:
        	return 2000 + (list[1] + list[2])*500
    
    # 숫자 4개 중 같은 번호가 3개
    # [1,1,1,2], [1,2,2,2]
    for i in range(3):
    	if lst[i] == lst[i+1]:
        	return 1000 + lst[i] * 100
    
    # 나머지 경우! 즉 같은 번호가 없음! 모두 서로 다른 번호
    return lst[-1] * 100
    
N = int(input())

print(max(money) for i in range(N)))

print

나의 느낀 점

  • 나는 "5번 케이스: 모두 다른 눈"을 판단하기 위한 로직으로 "elif len(new_nums) == 4:"라는 조건을 체크 했는데, 쌤은 그냥 마지막 return으로 (그니깐 위에 조건을 충족하지 않으면 답은 곧 5번케이스에 해당) 처리하였다! 크흐! 불필요한 조건을 빼고! 위에 조건을 모두 충족하지 않는 "else"문 처리를 적극 활용해야겠다!
profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글