SWEA 1493. 수의 새로운 연산 (Python, 구현?수학?, D3)

전승재·2023년 10월 16일
0

알고리즘

목록 보기
63/88

SWEA 1493. 수의 새로운 연산 문제 바로가기

문제 접근

처음에 문제를 접했을 때는 2차원 배열을 선언하여 모든 수를 넣어줘야 하나? 라는 생각이 들었다. 하지만 그렇게 되면 메모리의 소모가 굉장히 클것이기 때문에 규칙성을 찾으려 노력했다.

숫자를 알때에는 숫자에서 1부터 n까지 빼다보면 숫자가 음수가 될 때가 있다. 이때 음수가 된 숫자가 의미하는 것은 대각선 라인에서 마지막에서 몇번째인가? 이고, 마지막으로 뺀 수가 의미하는 것은 몇번째 라인인가?이다. 이 두가지가 있다면 우리는 좌표를 알아낼 수 있다.
좌표를 알때에는 그의 반대로 진행하면 된다.
모든 대각선은 y=-x+a의 형태이기 때문에 x+y=a로 몇번째 라인인지 알 수 있다. 이렇게 x+y로 몇번째 라인인지 알아낸 후에 n번째라인일 경우에 1부터 n까지 더한후에 x를 더해주면 그 좌표에 정해진 숫자를 알 수 있다.

문제 풀이

숫자를 알고 좌표를 알아내야할 때

    p, q = map(int, input().split())
    # y = -x + a임을 이용
    a_p = 0
    a_q = 0
    for i in range(200):
        if p > 0:
            p = p-i # 그 라인에서 몇번째에 위치한지를 알 수 있음
            a_p = i # 몇번째라인에 위치한지 알 수 있음
        if q > 0:
            q = q-i
            a_q = i
    
    p_x = a_p + p # 몇번째라인인지에서 음수인 p를 더하면 x값이 나옴
    p_y = abs(p)+1 # 좌표 y는 p를 양수로 바꾸고 1을 더하면 그 값이 나옴
    q_x = a_q + q
    q_y = abs(q)+1

더하기 연산

    result_x = p_x+q_x
    result_y = p_y+q_y
    result = 0

좌표를 알고 숫자를 알아내야할 때

    len_res = result_x+result_y
    for i in range(len_res-1):
        result += i
    result += result_x
    print(f'#{test_case} {result}')

제출 코드

T = int(input())
for test_case in range(1, T + 1):
    p, q = map(int, input().split())
    # y = -x + a임을 이용
    a_p = 0
    a_q = 0
    for i in range(200):
        if p > 0:
            p = p-i # 그 라인에서 몇번째에 위치한지를 알 수 있음
            a_p = i # 몇번째라인에 위치한지 알 수 있음
        if q > 0:
            q = q-i
            a_q = i
    
    p_x = a_p + p
    p_y = abs(p)+1
    q_x = a_q + q
    q_y = abs(q)+1

    result_x = p_x+q_x
    result_y = p_y+q_y
    result = 0
    len_res = result_x+result_y
    for i in range(len_res-1):
        result += i
    result += result_x
    print(f'#{test_case} {result}')

1개의 댓글

comment-user-thumbnail
2024년 4월 22일

안녕하세요.
궁금한 점이 있어서 질문드리는데 답변주시면 감사드리겠습니다.

  1. 1부터 n까지 뺄 때 n이 무엇인가요?
  2. 대각선 라인에서 마지막에서 몇 번째인가?를 판단할 때 마지막의 방향은 문제의 그림의 대각선의 화살표 반대 방향을 말씀하시는 건가요?
  3. x+y=a에서 a가 몇 번째 라인인지 나타내는 건가요?
  4. 문제 접근 설명의 마지막 줄의 더한다는 x가 무엇인가요?
답글 달기