본문 바로가기

코딩테스트 풀이 정리/코테1

코딩테스트 #2. 회전 배열 문제

728x90

( 문제 )

 

입력의 n, 과 불값인 clockwise가 주어집니다.

문제 설명은 아래의 그림을 참고해주세요

 

문제 설명

위의 그림처럼 n과 clockwise가 주어질 때 그림의 마지막 부분의 숫자 배열을 리턴해주는 게 출력을 원하는 문제입니다.

문제를 풀면서 여러가지 방식을 고민했지만 결론적으로 풀이에 성공한 풀이만 설명하겠습니다.

 


(문제 해설)

 

그림을 먼저 참고하시죠.

 

문제 해설

 

이렇게 풀이하면 좋은 점이 n이 홀수 일 때 짝수 일때 구분하지 않아도 된다는 점입니다.

짝수 일 때는 왜 될까요?라는 의문점이 드신다면 위의 그림처럼 한번 그려보시면 알 수 있습니다.

clockwise가 True, False는 구분해야 되는데 제가 False까지는 코딩하기가 귀찮아서..

그건 이걸 읽는 분들에게 맡깁니다.

 

아래는 코드입니다.

 


[ 코드 ]

 

def down(size, answer, idx, px):
    for x in range(size):
        answer[x + px][len(answer) - 1 - px] = idx
        idx += 1

        if x == size - 2:
            return


def left(size, answer, idx, py):
    for y in range(size - 1, 0, -1):
        answer[len(answer) - 1 - py][y + py] = idx
        idx += 1
        if y == py - 1:
            return


def up(size, answer, idx, px):
    for x in range(size - 1, 0, -1):
        # answer[len(answer) - 1 - px][y + px] = idx
        answer[x + px][px] = idx
        idx += 1
        if x == px - 1:
            return


def right(size, answer, idx, py):
    for y in range(size):
        answer[py][y + py] = idx
        idx += 1
        if y == size - 2:
            return idx


def solution(n, clockwise):
    answer = [[0] * n for _ in range(n)]
    size = len(answer)

    if clockwise:
        idx = 1
        px = 0
        py = 0
        if n % 2 != 0:
            while size > 0:
                # 1. (len(n), 0)
                down(size, answer, idx, px)
                # 2.
                left(size, answer, idx, py)
                # 3.
                up(size, answer, idx, px)
                # 4.(0, 0)
                idx = right(size, answer, idx, py)
                px += 1
                py += 1
                size -= 2

            # 체크용
            for i in answer:
                print(i)
        else:
            while size > 0:
                # 1. (len(n), 0)
                down(size, answer, idx, px)
                # 2.
                left(size, answer, idx, py)
                # 3.
                up(size, answer, idx, px)
                # 4.(0, 0)
                idx = right(size, answer, idx, py)
                px += 1
                py += 1
                size -= 2

            # 체크용
            for i in answer:
                print(i)

    return answer


n = 6
c = True
sol = solution(n, c)

 

 


후기

 

막상 코테를 볼 때는 함수 화하지도 않았고 위의 아이디어대로 안 풀어서

결국에는 n이 짝수 c = True일 때만 구현한 게 기억이 나네요.

중간에 풀면서 부분분을 함수 화해서 써먹아야 된다는 걸 느꼈지만

느꼈을 때는 이미 늦업스죠.. 예

다음 문제는 4번 문제와 비슷하다는 백준 등산 마니아를 풀 예정입니다.

이미 풀었지만 풀이는 내일 올릴게요 그럼 이만!

728x90