BOJ 14696: 딱지놀이
CUJ 4876: 딱지놀이
아주 어려운 문제는 아니었던 것 같다. 맨날 boj 뭐시기 검색하면서 가이드라인만 주구장창 따라하면서 나중에 이해하곤 했는데, 이번 문제는 오로지 나만의 힘으로 풀어서 뿌듯하기도 하다.
사실 맨 처음에, 예시 입력을 보았을 때 조금 헷갈렸다. 하지만, 차근차근 읽어보니 쉽게 이해할 수 있었다.
- 1번째 줄: 라운드 횟수 (N)
- 2번째 줄 (A의 딱지):
- 1번째 숫자: 어린이 A의 낸 딱지의 수
- 2번째 숫자 ~ 마지막 숫자: 어린이 A가 낸 딱지
- 3번째 줄 (B의 딱지):
- 1번째 숫자: 어린이 B의 낸 딱지의 수
- 2번째 숫자 ~ 마지막 숫자: 어린이 B가 낸 딱지
- 이후로 라운드 횟수에 맞춰 2번째 줄과 3번째 줄이 번갈아 나온다.
예시 입력을 보아하니, 입력 부분을 처리하는 것도 꽤나 귀찮을 것 같았다. 그래서, 맨 처음에는 함수를 하나 짜서 재사용할 수 있도록 해두었다.
def cards(card_list): # Input: Map Object
cards_count = [0, 0, 0, 0]
ls = list(card_list)
card_number = ls.pop(0)
for i in range(card_number):
cards_count[ls[i] - 1] += 1
return cards_count.reverse() # To prevent reversed-list problem
.
.
.
A_cards = cards(map(int, input().split()))
맨 밑의, A_cards를 입력받을 때, map 함수를 이용하여 모든 데이터를 한번에 받아오도록 한다.
단, 명심할 점은 Map Object로 반환되기 때문에, list 함수로 하여금 Map Object를 List Object로 변경하였다.
그리고, Counting을 용이하게 할 수 있도록 각 줄 맨 처음에 있는 딱지의 개수를 pop 함수로 따로 담아두었고, 나머지의 값을 Index Counting을 이용하여 cards_count 리스트에 딱지의 개수를 입력하였다.
마지막으로, 별부터 비교할 때 별(4)이 맨 뒤에 있으면 조금 귀찮으므로, reverse 함수를 쓰고 리턴해준다.
딱히 특별히 언급할 것은 없다. 그저 비교하는 함수.
def shobu(A_cards, B_cards):
for i in range(4):
if A_cards[i] > B_cards[i]: # A win -> return 1
return 1
elif A_cards[i] < B_cards[i]: # B win -> return -1
return -1
return 0 # Draw -> return 0
이때 평소와는 살짝 다른 방식으로 값을 저장했는데, 외부에 history라는 list를 만들어 append를 시켰다. 마지막에 차례대로 출력시키면 될 것이다.
for his in history:
if his == 1:
print('A')
elif his == -1:
print('B')
else:
print('D')
정말로 간단하다. 방금 언급했던 history를 이용하여 저장된 값을 A, B, D로 바꾸어 출력토록 하였다.
이로써 문제는 풀렸다. 중간중간 나오지 못한 코드를 포함하여 전체 코드를 공개하려고 한다.
def cards(card_list): # Input: Map Object
cards_count = [0, 0, 0, 0]
ls = list(card_list)
card_number = ls.pop(0)
for i in range(card_number):
cards_count[ls[i] - 1] += 1
return cards_count.reverse() # To prevent reversed-list problem
def shobu(A_cards, B_cards):
for i in range(4):
if A_cards[i] > B_cards[i]: # A win -> return 1
return 1
elif A_cards[i] < B_cards[i]: # B win -> return -1
return -1
return 0 # Draw -> return 0
history = []
N = int(input())
for i in range(N):
A_cards = cards(map(int, input().split()))
B_cards = cards(map(int, input().split()))
history.append(shobu(A_cards, B_cards))
for his in history:
if his == 1:
print('A')
elif his == -1:
print('B')
else:
print('D')