🔗 문제 링크
from collections import Counter
T = int(input())
for _ in range(T):
n = int(input())
numbers = list(map(int, input().split()))
answer = 0
counter = Counter(numbers).most_common()
counter.sort(key=lambda x: (-x[1], -x[0]))
print(f'#{n} {counter[0][0]}')
Counter
를 이용하여 점수의 등장 횟수를 구한 뒤, sort()
를 이용하여 등장 횟수
, 점수
순으로 내림차순으로 정렬한다.점수
를 정렬 조건에 추가하는 이유는 최빈수가 여러 개일 경우 점수가 높은 순대로 정렬하기 위함이다.🔗 문제 링크
A
사: 1리터 당P
원의 돈을 내야 한다.B
사: 기본 요금이Q
원이고, 월간 사용량이R
리터 이하인 경우 요금은 기본 요금만 청구된다. 하지만R
리터보다 많은 양을 사용한 경우 초과량에 대해 1리터당S
원의 요금을 더 내야 한다.
T = int(input())
for test_case in range(1, T + 1):
p, q, r, s, w = map(int, input().split())
answer = min(w * p, q + max(0, w - r) * s)
print(f"#{test_case} {answer}")
A
사 사용했을 때의 요금: w(수도의 양)
* P
B
사 사용했을 때의 요금: max(0, w - r)(기본 요금을 초과한 리터의 양)
* S
+ Q(기본 요금)
🔗 문제 링크
T = int(input())
for test_case in range(1, T + 1):
n = int(input())
price = list(map(int, input().split()))
profit = 0
max_price = price[-1]
for i in range(n - 2, -1, -1):
if price[i] < max_price:
profit += (max_price - price[i])
else:
max_price = price[i]
print(f"#{test_case} {profit}")
max_price
보다 작은 경우 profit
에 max_price
와의 차이를 더하고, max_price
보다 같거나 큰 경우 max_price
값을 업데이트해준다. 🔗 문제 링크
n = int(input())
word = ['3', '6', '9']
for i in range(1, n + 1):
count = 0
for w in word:
if w in str(i):
count += str(i).count(w)
if count == 0:
print(i, end=' ')
else:
print('-' * count, end=' ')
3
, 6
, 9
가 들어가면 들어간 횟수만큼 -
을 출력하고, 들어가지 않는다면 숫자를 출력한다.🔗 문제 링크
T = int(input())
for test_case in range(1, T + 1):
s = input()
binary = ''
answer = ''
table = {"A": 0, "B": 1, "C": 2, "D": 3, "E": 4, "F": 5, "G": 6, "H": 7, "I": 8, "J": 9,
"K": 10, "L": 11, "M": 12, "N": 13, "O": 14, "P": 15, "Q": 16, "R": 17, "S": 18, "T": 19,
"U": 20, "V": 21, "W": 22, "X": 23, "Y": 24, "Z": 25, "a": 26, "b": 27, "c": 28, "d": 29,
"e": 30, "f": 31, "g": 32, "h": 33, "i": 34, "j": 35, "k": 36, "l": 37, "m": 38, "n": 39,
"o": 40, "p": 41, "q": 42, "r": 43, "s": 44, "t": 45, "u": 46, "v": 47, "w": 48, "x": 49,
"y": 50, "z": 51, "0": 52, "1": 53, "2": 54, "3": 55, "4": 56, "5": 57, "6": 58, "7": 59,
"8": 60, "9": 61, "+": 62, "/": 63}
for i in s:
binary += (bin(table[i])[2:]).zfill(6)
for i in range(0, len(binary), 8):
answer += chr(int(binary[i:i + 8], 2))
print(f"#{test_case} {answer}")
table
)를 참고하여 숫자로 변환하고, 이를 이진수로 변환한 뒤 십진수로 변환한다.🔗 문제 링크
T = int(input())
for test_case in range(1, T + 1):
n = int(input())
speed = 0
distance = 0
for _ in range(n):
command = input().split()
if command[0] == '0':
pass
elif command[0] == '1':
speed += int(command[1])
else:
speed = max(0, speed - int(command[1]))
distance += speed
print(f"#{test_case} {distance}")
command[0]
이0
일 때는 현재 속도 유지
이므로 별 다른 작업을 하지 않아도 된다.1
일 때는 가속
이므로 speed
를 command[1]
만큼 증가시킨다.2
일 때는 감속
이므로 speed
를 command[1]
만큼 감소시킨다. (감소시켰을 때 0
보다 작아질 때는 0
으로 한다고 했으므로 max()
를 이용해준다.)speed
만큼 distance
를 더해준다.🔗 문제 링크
T = int(input())
for test_case in range(1, T + 1):
n = int(input())
answer = [0, 0, 0, 0, 0]
numbers = [2, 3, 5, 7, 11]
for i in range(4, -1, -1):
while n % numbers[i] == 0:
answer[i] += 1
n //= numbers[i]
print(f"#{test_case}", end=' ')
print(*answer)
🔗 문제 링크
T = int(input())
for test_case in range(1, T + 1):
n = int(input())
docs = ''
for _ in range(n):
c, k = input().split()
docs += c * int(k)
print(f'#{test_case}')
for i in range(0, len(docs), 10):
print(docs[i:i+10])
🔗 문제 링크
T = int(input())
for test_case in range(1, T + 1):
a, b, c, d = map(int, input().split())
calendar = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
answer = d - b + 1
for i in range(a, c):
answer += calendar[i]
print(f"#{test_case} {answer}")
calendar
에 모두 저장한다. (월 그대로 접근하기 위해서 맨 앞에 0
을 추가해주었다.)d(두 번째 날짜의 일)
- b(첫 번재 날짜의 일)
을 answer
로 설정한다.a
과 c
사이에 있는 모든 달의 날을 answer
에 더해준다.🔗 문제 링크
T = int(input())
for test_case in range(1, T + 1):
n = int(input())
board = [[0] * n for _ in range(n)]
num = 0
y = 0
x = -1
size = n
step = 1
while size > 0:
for _ in range(size):
x += step
num += 1
board[y][x] = num
size -= 1
for _ in range(size):
y += step
num += 1
board[y][x] = num
step *= -1
print(f"#{test_case}")
for b in board:
print(*b)
🔗 해설은 여기 참고