T = int(input())
for test_case in range(1, T + 1):
string = input()
pattern_len = 0
for i in range(1, len(string)):
if string[:i] == string[i:2*i]:
pattern_len = i
break
print(f'#{test_case} {pattern_len}')
문제를 잘 읽자!!
처음에는 전체 문자열에 패턴이 몇 개 들어가는지 구하는 문제인줄 알고 계속 전체 길이에서 나누다가 뒤늦게 패턴 자체의 길이를 구하는 문제라는 걸 알게됐다;;
T = int(input())
for test_case in range(1, T + 1):
string = input()
check = 0
if string == string[::-1]:
check = 1
else:
check = 0
print(f'#{test_case} {check}')
파이썬이라 쉽게 풀 수 있었던 문제 같다.
import statistics
T = int(input())
for test_case in range(1, T + 1):
nums = list(map(int, input().split()))
nums.remove(max(nums))
nums.remove(min(nums))
print(f'#{test_case} {int(round(statistics.mean(nums), 0))}')
문제 조건 따라서 마지막 int로 변환하는거 까먹지 말기!!
T = int(input())
grades = ['A+', 'A0', 'A-', 'B+', 'B0', 'B-', 'C+', 'C0', 'C-', 'D0']
for test_case in range(1, T + 1):
n, k = map(int, input().split())
students = []
k_score = 0
for i in range (1, n+1):
scores = list(map(int, input().split()))
score = 0.35 * scores[0] + 0.45 * scores[1] + 0.2 * scores[2]
if i == k:
k_score = score
students.append(score)
students = sorted(students, reverse=True)
rank = students.index(k_score)
grade = rank // (n//10)
print(f'#{test_case} {grades[grade]}')
맞기는 했지만 어쩐지 더 깔끔하게 푸는 방법이 있을 것만 같다.
내가 풀었지만 상당히 마음에 안드는 풀이..
T = int(input())
for test_case in range(1, T + 1):
h1, m1, h2, m2 = map(int, input().split())
h = h1 + h2
m = m1 + m2
if m > 60:
m -= 60
h += 1
if h > 12:
h -= 12
print(f'#{test_case} {h} {m}')
시, 분 넘어가는 것만 신경쓰면 된다.
T = int(input())
for test_case in range(1, T + 1):
n, k = map(int, input().split())
puzzle = [list(map(int, input().split())) for _ in range(n)]
count = 0
#가로 검사
for i in range(n):
part = puzzle[i]
check = 0
for cell in part:
if cell:
check += 1
else:
if check == k:
count += 1
check = 0
if check == k:
count += 1
#세로 검사
for i in range(n):
part = [puzzle[x][i] for x in range(n)]
check = 0
for cell in part:
if cell:
check += 1
else:
if check == k:
count += 1
check = 0
if check == k:
count += 1
print(f'#{test_case} {count}')
처음에는 퍼즐을 단어의 크기대로 잘라놓고 검사를 했는데 이렇게 하니 단어의 길이보다 더 큰 칸도 단어가 들어갈 수 있다고 체크하게 된다.
단어의 길이와 정확하게 일치하는 칸의 개수만 찾아야 하는 문제!
T = int(input())
for test_case in range(1, T + 1):
sudoku = [list(map(int, input().split())) for _ in range(9)]
answer = 1
# 가로 검사
for i in range(9):
row = set(sudoku[i])
if len(row) != 9:
answer = 0
break
# 세로 검사
for i in range(9):
col = set( [sudoku[x][i] for x in range(9)])
if len(col) != 9:
answer = 0
break
# 블럭 검사
for i in range(3):
row = sudoku[i*3:(i+1)*3]
for j in range(3):
block = []
for r in row:
block += r[j*3:(j+1)*3]
if len(set(block)) != 9:
answer = 0
break
print(f'#{test_case} {answer}')
set를 이용해 겹치는 원소가 있는지 확인해주었다.
행과 열을 검사하는 부분은 쉽게 해결했는데 블럭을 검사하는 부분에서 반복문을 꼭 3개를 써야하는가.. 때문에 많은 고민을 했다.
어차피 주어진 문제에서는 각 반복의 수가 3을 넘지 않기 때문에 그냥 삼중 반복을 사용하였다.
T = int(input())
moneys = [50000, 10000, 5000, 1000, 500, 100, 50, 10]
for test_case in range(1, T + 1):
money = int(input())
change = ''
for m in moneys:
change = change + ' ' + str(money // m)
money %= m
print(f'#{test_case}')
print(change[1:])
문제는 쉬웠지만 출력 형식을 안맞춰서 2번이나 틀렸다.
문제를 잘 읽자...!!