본문 바로가기
Develop/알고리즘

[백준/Python] 보드게임컵 A번/Bronze III #27159 노 땡스!

by favorcat 2023. 1. 24.
반응형
 

27159번: 노 땡스!

《노 땡스!》는 $3$부터 $35$까지의 정수가 쓰인 수 카드를 이용하여 플레이할 수 있는 보드게임입니다. 수 카드를 경매를 통해서 낙찰받으며, 최종적으로 가지고 있는 수 카드를 이용하여 다음과

www.acmicpc.net

문제

입력

출력

첫 번째 줄에 문제에서 설명한 규칙에 따라 계산한 점수를 출력합니다.

풀이

# 카드의 개수
n = int(input())

# N개의 카드
card = list(map(int, input().split()))
card.sort() # 카드 오름차순 정렬

answer = 0 		# 정답(점수)
arr = [card[0]] # 그룹화하여 담을 리스트
tmp = card[0] 	# 연속하는 수 인지 판별하기 위한 변수

for i in range(n):
  if i > 0:
    if card[i]-tmp != 1: # 만약 이전의 수와 차가 1이 아니라면
      answer += arr[0] 	 # 점수에 그룹의 가장 작은 수를 더하고
      arr = []			 # 그룹을 초기화
    tmp = card[i]		 # 현재 수를 tmp에 담고
    arr.append(card[i])	 # 그룹에 현재 수를 추가

  if i == n-1:			 # 마지막 요소라면
    answer += arr[0]	 # 현재 그룹의 가장 작은 수를 더함

print(answer)

노 땡스!는 3부터 35까지의 정수가 쓰인 카드를 이용해 플레이할 수 있는 보드게임
1. 정수들은 오름차순으로 정렬한 뒤, 이웃한 수끼리의 차가 1인 구간들로 그룹화
2. 각 그룹별로 가장 작은 수를 모든 합한 값이 점수

예를 들어 가지고 있는 카드가 [6, 7, 10, 12, 13, 14, 15, 20, 21, 22] 라면
[6, 7] [10] [12, 13, 14, 15] [20, 21, 22] 이렇게 총 4개의 그룹으로 나뉘고
점수는 6+10+12+20 = 48점

card에 입력받아 오름차순으로 정렬하고,
그룹화 하는 것을 arr로 리스트를 만들어 tmp에 현재 지나가는 요소를 저장해 둔 다음,
다음 요소에서 이전과 차이가 1인지 확인 한 뒤, 1이 아니라면 arr는 초기화 하고, 현재 arr의 가장 첫번째 요소를 점수에 추가한다.

반응형

Comment