SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
1. 문제 설명

2차원 평면 제 1사분면 위의 격자점 (x,y)에 위 그림과 같이 대각선 순서로 점에 수를 붙인다.
점 (x,y)에 할당된 수는 #(x,y)로 나타낸다.
예를 들어 #(1,1) = 1, #(2,1)=3, #(2,2) = 5, #(4,4) = 25이다.
반대로 수 p가 할당된 점을 &(p)로 나타낸다.
예를 들어 &(1) = (1,1), &(3) = (2,1), &(5) = (2,2), &(25) = (4,4)이다.
두 점에 대해서 덧셈을 정의한다. 점 (x,y)와 점 (z,w)를 더하면 점 (x+z, y+w)가 된다.
즉, (x,y) + (z,w) = (x+z, y+w)로 정의한다.
우리가 해야 할 일은 수와 수에 대한 새로운 연산 ★를 구현하는 것으로, p★q는 #(&(p)+&(q))으로 나타난다.
예를 들어, &(1)=(1,1), &(5) = (2,2)이므로, 1★5 = #(&(1)+&(5)) = #((1,1)+(2,2)) = #(3,3) = 13이 된다.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 두 정수 p,q(1 ≤ p, q ≤ 10,000)가 주어진다.
[출력]
각 테스트 케이스마다 ‘#t’(t는 테스트 케이스 번호를 의미하며 1부터 시작한다)를 출력하고, 각 테스트 케이스마다 p★q의 값을 출력한다.
2. 코드
x축 맨 밑에 해당하는 배열을 생성한 뒤 그림과 같이 대각선 방향으로 수를 찾는 방법을 생각했습니다. temp_x는 점이 위치하고 있는 대각선 맨 밑에 해당하는 x위치를 찾도록 하였습니다. 이후에 간단한 계산을 통해 최종적인 결과값을 찾았습니다.
아래가 작성한 코드입니다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# 점의 임시 x 위치를 찾기 위한 함수
def temp_x(dot):
for x in range(len(arr)-1):
if dot >= arr[x] and dot < arr[x+1]:
return x
# 점의 정확한 위치를 찾는 함수
def result_xy(dot, x_temp):
y_temp= 0
# 점의 숫자와 x_temp가 같은 경우 x축 가장 밑줄에 해당함으로 바로 리턴
if dot != arr[x_temp]:
# 다른 경우 정확한 위치를 찾기 위해 반복문 수행
x_temp += 1
temp_r = arr[x_temp]
while temp_r != dot:
temp_r -= 1
x_temp -= 1
y_temp += 1
return x_temp, y_temp
T = int(input())
# x축에 가장 밑줄에 해당하는 숫자들을 배열에 저장
arr = [1]
i = 1
while 1:
arr.append(arr[i-1] + i+1)
# p와 q의 범위가 10000 이하 -> 적당한 크기 생성
if len(arr) > 300 :
break
i += 1
for tc in range(1, T+1):
p, q = map(int, input().split())
# p, q의 현재 임시 x 위치를 찾음
x_temp_p = temp_x(p)
x_temp_q = temp_x(q)
# p, q의 정확한 x, y 위치를 찾음
x_temp_p, y_temp_p = result_xy(p, x_temp_p)
x_temp_q, y_temp_q = result_xy(q, x_temp_q)
# p, q 위치로 결과 위치를 찾음
x_result = x_temp_p + x_temp_q
y_result = y_temp_p + y_temp_q
# 연산 결과로 나온 점을 찾음
result = arr[x_result + y_result + 2] - y_result - 1
print('#{} {}'.format(tc, result))
|
'python' 카테고리의 다른 글
| 치킨 배달 Python (BEAKJOON) (0) | 2020.03.25 |
|---|---|
| DFS와 BFS Python (BEAKJOON) (0) | 2020.03.24 |
| 오목 Python (BEAKJOON) (0) | 2020.03.22 |
| N-Queen Python (SW Expert Academy) (0) | 2020.03.21 |
| 세제곱근을 찾아라 Python (SW Expert Academy) (0) | 2020.03.21 |