본문 바로가기
  • 머킹이의 머신로그
오늘부터 코딩테스트

[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 기초 프로그램 풀기

by 머킹 2023. 11. 20.
728x90

[파이썬] 프로그래머스  Lv0. 정수를 나선형으로 배치하기, 특별한 이차원 배열 2 , 정사각형으로 만들기

 

안녕하세요 머킹입니다!

다들 잘 지내시나요?

오늘 테크 블로그 리뷰 하는 날인데 늦어버렸습니다..ㅎㅎ

 

오늘 문제 푸는데 예전에 pccp 교육 들었던 게 생각나서

되게 반가웠어요.

 


정수를 나선형으로 배치하기

def solution(n):
    answer = [[0] * n for _ in range(n)]  
    num = 1 
    top, bottom, left, right = 0, n - 1, 0, n - 1  

    while num <= n**2:
        for i in range(left, right + 1):
            answer[top][i] = num
            num += 1
        top += 1

        
        for i in range(top, bottom + 1):
            answer[i][right] = num
            num += 1
        right -= 1

        if top <= bottom:
            for i in range(right, left - 1, -1):
                answer[bottom][i] = num
                num += 1
            bottom -= 1

        if left <= right:       
            for i in range(bottom, top - 1, -1):
                answer[i][left] = num
                num += 1
            left += 1

    return answer

 

진짜 진짜 어렵게 풀었습니다.

pccp에서 배웠던 이론을 짠하고 바로 표현하고 싶은데

아직 잘 안되네요.. 더 노력해야겠습니다.

 


특별한 이차원 배열 2

 

 

이 문제가 무슨 소릴까...

계속 생각해 보다가 이해가 안 되면 저는 펜을 드는데요.

역시 펜을 들어서 노트에 적어보니까 이해가 됐습니다.

 

def solution(arr):
    n = len(arr)
    
    for i in range(n):
        for j in range(i+1, n):
            if arr[i][j] != arr[j][i]:
                return 0
    return 1
def solution(arr):
    return int(arr == list(map(list, zip(*arr))))

와 이런 풀이...

볼 때마다 존경하게 됩니다.

 

이런 풀이를 보면 순서가 항상

와 대단하다 나도 더 간결하게(?) 풀어야지! -> 잘 모르겠어서 일단 막일로 풀기 -> 제출....

이런 사이클을 돌게 되는 것 같아요 ㅎㅎ

 

그래서 생각해 본 게 이런 풀이를 기억해 두고

저번에 그 풀이로는 못 푸나?를 먼저 생각하면 좋을 것 같다는 다짐을 했습니다


정사각형으로 만들기

 

 

def solution(arr):
    row_count = len(arr)
    col_count = len(arr[0]) if row_count > 0 else 0
    
    if row_count > col_count:
        for i in range(row_count):
            arr[i] += [0] * (row_count - col_count)
    elif row_count < col_count:
        for i in range(row_count):
            arr[i] += [0] * (col_count - row_count)
    return arr

 

어렵게 풀었는데..!

 

네.. 뒤에 잘 못 들어가고 있네요 ㅎㅎ

def solution(arr):
    row_count = len(arr)
    col_count = len(arr[0]) if row_count > 0 else 0

    if row_count > col_count:
        for i in range(row_count):
            arr[i] += [0] * (row_count - len(arr[i]))
    elif row_count < col_count:
        for i in range(row_count, col_count):
            arr.append([0] * col_count)

    return arr

 

이렇게 바꿨습니다!

def solution(arr):
    n=len(arr)
    m=len(arr[0])
    if n>m:
        for i in range(n):
            for j in range(n-m):
                arr[i].append(0)
    else:
        for i in range(m-n):
            arr.append([0]*m)

    return arr

 

이 방법도 되게 좋네요 ㅎㅎ