A. Puzzle Pieces

문제

예시

[input]
3
1 3
100000 100000
2 2

[output]
YES
NO
YES

답1 – 이곳을 클릭하면 정답이 보입니다
def answer(r, c):
    if r == 1 or c == 1: return "YES"
    if r == 2 and c == 2: return "YES"
    return "NO"

n = int(input())
for _ in range(n):
    r, c = map(int, input().split())
    print(answer(r, c))

특이한 케이스가 있을것 같지만, 한면에 tab이 2개 이상이면 절대 못 이어 붙이니까 이 코드가 답니다.

답2 – 이곳을 클릭하면 정답이 보입니다

설명

B. Card Constructions

문제

예시

[input]
5
3
14
15
24
1

[output]
1
2
1
3
0

답1 – 여기를 클릭하면 정답이 보입니다
def neededCards(h):
    return 2*(h*(h+1)//2) + (h*(h-1)//2)

def answer(cards):
    if cards == 1: return 0
    _max = 1
    stack = 0
    for i in range(1, cards):
        stack += (3*(i-1))+2
        if cards < stack:
            _max = i-1
            break
    count = 0
    for h in range(_max, 0, -1):
        _c = neededCards(h)
        if cards > 1 and cards%_c == 0:
            return count+(cards//_c)
        if cards >= _c:
            count += 1
            cards -= _c
    if cards > 2:
        count += (cards//2)
    return count

n = int(input())
for _ in range(n):
    cards = int(input())
    print(answer(cards))

n개로 만들 수 있는 최대 높이의 피라미드가 뭔지를 알아내야해
그럴려면 피라미드를 만드는 규칙을 알아내야해

1 => 21 + (0) 2 => 2(2+1) + (1+0)
3 => 2(3+2+1) + (2+1+0) 4 => 2(4+3+2+1) + (3+2+1+0)

2 7 15 26 40 57
5 8 11 14 17

답2 – 여기를 클릭하면 정답이 보입니다

설명

C. Hilbert’s Hotel

문제

예시

[input]
6
1
14
2
1 -1
4
5 5 5 1
3
3 2 1
2
0 1
5
-239 -2 -100 -3 -11

[output]
YES
YES
YES
NO
NO
YES

답1 – 여기를 클릭하면 정답이 보입니다
def answer(n, arr) :
  intercepts = []
  for i in range(n):
    intercept = i + arr[i%n]
    intercepts.append(intercept)
  for i in range(n):
    for j in range(i+1, n):
      if ((-intercepts[i]) + intercepts[j])%n == 0:
        return "NO"
  return "YES"

testCount = int(input())
for _ in range(testCount):
  n = int(input())
  arr = list(map(int, input().split()))
  print(answer(n, arr))
답2 – 여기를 클릭하면 정답이 보입니다

설명