코딩테스트/SWEA

[SW Expert Academy][D2][python]1961. 숫자 배열 회전 join

코린영이 2023. 5. 13. 15:00
728x90
반응형

코딩테스트 문제 푸는 방향
1. 문제를 정독한다. 정독하면서 손으로 한 번 풀어본다.
2. 접근 방법을 구상한다.
3. 핵심 코드를 시각적으로 보이도록 손코딩한다. 
4. 코드를 구현한다. 
5. 디버깅 및 개선을 한다.
6. 부분 정답이 나올 시 1번으로 돌아가 더 꼼꼼하게 읽어보고 다른 접근 방법은 없는지 생각해본다. 

1961. 숫자 배열 회전

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5Pq-OKAVYDFAUq&categoryId=AV5Pq-OKAVYDFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=PYTHON&select-1=2&pageSize=10&pageIndex=2 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

N x N 행렬이 주어질 때

시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하면 된다.

 

[제약 사항]

N은 3이상 7이하이다.

 

[문제 해결 방향]

이제 N*N 행렬을 입력받는건 껌이쥐. 여기까지는 그랬다,,ㅎ

일단 회전을 시키게 되면 나오는 좌표(i, j)의 규칙을 찾아야 하는데

N = 3 일 때 먼저 90도를 돌려보면

(0,0) -> (2,0)

(0,1) -> (1,0)

(0,2) -> (0,0)

(1,0) -> (2,1)

(1,1) -> (1,1)

(1,2) -> (0,1)

(2,0) -> (2,2)

(2,1) -> (1,2)

(2,2) -> (0,2)

j의 자리에는 i가 그대로 와있는 것을 볼 수 있다.

그리고 i의 자리에는 N-j-1이 와있는 것을 볼 수 있다.

 

이 규칙이 확실한지 또 보기 위해 그 다음으로 90도를 더 돌려보면

(2,0) -> (2,2)

(1,0) -> (2,1)

(0,0) -> (2,0)

(2,1) -> (1,2)

(1,1) -> (1,1)

(0,1) -> (1,0)

(2,2) -> (0,2)

(1,2) -> (0,1)

(0,2) -> (0,0)

규칙이 성립하는 것을 볼 수 있다.

 

근데 규칙을 찾는 것보다 제일 충격적인 출력하기,,,

요렇게 세로로 출력을 해야 한다,,

90도 한 줄, 180도 한 줄, 270도 한 줄을 한 칸씩 띄어서 출력하고 개행한 다음

한 줄씩 출력한다,, ㅎ

참고 사이트에서는 살짝 복잡하게 했는데 join을 사용하면 더 간단하게 출력할 수 있더

join으로 출력하는 방법 알아두기!! 중요!! 

 

[파이썬 코드]

T = int(input())
for test_case in range(1, T+1):
    N = int(input())
    # N*N 행렬 입력받기
    arr = [list(input().split()) for _ in range(N)]
    
    # 90도, 180도, 270도 행렬 초기화
    arr_90 = [[0 for _ in range(N)] for _ in range(N)]
    arr_180 = [[0 for _ in range(N)] for _ in range(N)]
    arr_270 = [[0 for _ in range(N)] for _ in range(N)]

    # 90도 회전
    for i in range(N):
        for j in range(N):
            arr_90[i][j] = arr[N-1-j][i]
    # 90도를 90도 회전 -> 180도 회전
    for i in range(N):
        for j in range(N):
            arr_180[i][j] = arr_90[N-1-j][i]
    # 180도를 90도 회전 -> 270도 회전
    for i in range(N):
        for j in range(N):
            arr_270[i][j] = arr_180[N-1-j][i]

    print("#{}".format(test_case))
	
    # join으로 출력하기 
    for i in range(N):
         print(''.join(arr_90[i]), ''.join(arr_180[i]), ''.join(arr_270[i]))

 

[참고 사이트]

https://velog.io/@yb_engineer/Algorithm-SWEA-1961.%EC%88%AB%EC%9E%90%EB%B0%B0%EC%97%B4%ED%9A%8C%EC%A0%84-python

 

Algorithm | SWEA 1961.숫자배열회전 (python)

본 문제의 저작권은 SW Expert 아카데미에 있습니다. > > SWEA 1961.숫자배열회전 링크 문제 코드 풀이 테스트 케이스 NxN 행렬 을 입력받으면 그 행렬을 시계방향으로 90도 / 180도 / 270도 회전한 행렬을

velog.io

이 사이트를 보고 어떻게 해결해야 할지 한 번에 이해를 했다

90도 회전한걸 90도 회전하면 원래걸 180도 회전한거고 그걸 또 90도 회전하면 원래걸 270도 회전시킨거고 암튼 그렇다

https://pythontoomuchinformation.tistory.com/69

 

SWEA # Python_D2_1961_숫자 배열 회전

👩‍🌾 [문제] N x N 행렬이 주어질 때, 시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라. SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertac

pythontoomuchinformation.tistory.com

 

 

[느낀점]

배열을 회전시키는 걸 생각하는게 좀 생각이 안났는데 한 번 보니까 괜찮은 것 같다ㅏㅏ

 

d2도 버거워ㅜㅜ d3 언제 올라갈 수 있어ㅜㅜ

 

728x90
반응형