AngelPlayer`s Diary

링크

https://www.acmicpc.net/problem/1913

 

 

 

 

문제 해석

입력

첫 번째 줄 : n
  n : 행, 열의 길이
      n^2 == 첫 번째 수
두 번째 줄 : m
  m : 좌표를 찾을 값



출력
1) 달팽이 결과 출력
2) m의 좌표 출력 / (1, 1)부터 시작함

 

 

 

 

풀이 & 코드 해석

삼성 코딩테스트 등에서 종종 사용되는 나선형으로 숫자 출력하는 문제입니다.

 

다음 숫자를 작성할 경로를 나타내는 dx dy를 따라서 쭉 숫자를 작성하다가, 범위를 벗어나거나 이미 작성된 위치가 있는 경우 방향을 바꿔서 다시 숫자를 채워가는 방식을 적용하면 쉽게 풀 수 있습니다.

 

하 우 상 좌 순으로 달팽이가 돌기 때문에 dx dy를 맞춰서 만들었습니다.

 

 

 

 

코드

# 하 우 상 좌
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]


def print_arr(arrs):
    for i in range(len(arrs)):
        for j in range(len(arrs[0])):
            print(arrs[i][j], end=" ")
        print()

n = int(input())
m = int(input())

arr = [[0] * n for i in range(n)]

now = n*n

x = 0
y = 0
d = 0
ax = 0
ay = 0

while now > 0:
    arr[x][y] = now

    # 좌표를 찾고자 하는 값이라면
    if now == m:
        ax = x + 1
        ay = y + 1

    now -= 1

    nx = x + dx[d]
    ny = y + dy[d]

    # 다음 위치가 범위를 벗어남 or 이미 채워진 경우
    if nx < 0 or nx >= n or ny < 0 or ny >= n or arr[nx][ny] != 0:
        # 방향을 바꿔줌
        d = (d + 1) % 4

    x = x + dx[d]
    y = y + dy[d]


print_arr(arr)
print(ax, ay)

 

 

 

 

발생한 문제 & 해결 방안

~~

 

 

 

 

 

 

 

해당 코드는 에디터가 코드 연습을 위해 직접 작성하였습니다.

혹시 오류가 있거나 더 좋은 코드 방향성을 아시는 분은 댓글로 남겨주시면 감사하겠습니다!

python source : https://github.com/ssh5212/conding-test-practice

java source : https://github.com/ssh5212/coding-test-java

공유하기

facebook twitter kakaoTalk kakaostory naver band