InTen

프로그래머스 월간 코드 챌린지 2번 문제 본문

프로그래밍/파이썬

프로그래머스 월간 코드 챌린지 2번 문제

인텐 2020. 9. 13. 17:21

링크:programmers.co.kr/competitions/417?slug=monthly-code-challenge-s1&utm_campaign=competition417&utm_medium=introduce_competition417&utm_source=programmers

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

[

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

](https://programmers.co.kr/learn/challenges)

프로그래머스 쪽 대회 관련 글들을 살펴보니 문제의 대한 해설 또는 글에 대한 제제가 없는것으로 확인되어서 글을 씁니다.

광고는 제거 하였고 비영리성을 띄게 게시글을 전환해 두었습니다.

문제가 있을시 비공개 처리하겠습니다.

 

2번 문제

 

2번 문제의 그림이다.

2차원 배열 안에 그림과 같이 넣는 방식인데
비슷한 문제로는 달팽이 사각형이라는 문제가 있다.

해결한 코드는

def solution(n):
    board = [[0]*n for y in range(n)]
    answer = []
    x, y, cnt=0, -1, 1
    while True:
        for i in range(0,n):
            y += 1
            board[y][x]=cnt
            cnt += 1
        n -= 1
        if n<=0:
            break
        for j in range(0,n):
            x += 1
            board[y][x] = cnt
            cnt += 1
        n -= 1
        if n<=0:
            break
        for i in range(1,n+1):
            y -= 1
            x -= 1
            board[y][x]=cnt
            cnt +=1
        n -= 1
        if n<=0:
            break
    for i in board:
        for j in i:
            if j != 0:
                answer.append(j)
    return answer

위의 코드와 같은데 코드 속도가 느릴꺼라는 생각과는 달리 잘 동작하기에 개선은 하지 않았다.

달팽이 사각형 문제는 x,y 좌표를 변환하는 식이 4개인것과 달리 삼각형은 3개의 식으로만 구성되어서 오히려 더 쉽게 구현 가능하다.

위의 그림처럼 알고리즘의 개념만 잡는다면 쉽게 구현 가능하다.

 

3~4번 문제는 정확하게 기억이 나지 않아서 코드를 다시 복구하게 된다면 게시글 작성을 하겠습니다.

 

Comments