출처 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV2b-QGqADMBBASw&categoryId=AV2b-QGqADMBBASw&categoryType=CODE

 

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
 
= int(input())
# x축에 가장 밑줄에 해당하는 숫자들을 배열에 저장
arr = [1]
= 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

+ Recent posts