코딩테스트/프로그래머스

프로그래머스 월간 코드 챌린지3 n^2 배열 자르기 파이썬 해설/코드, 살짝 복잡한 구현문제

RyanKwon 2021. 12. 24. 18:30
728x90

풀이 코드만 궁금한 분은 깃허브 링크 눌러주세요

 

GitHub - Rhyankwon/algorithms

Contribute to Rhyankwon/algorithms development by creating an account on GitHub.

github.com

 

문제 설명ㄱㄱ

 

코딩테스트 연습 - n^2 배열 자르기

정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부

programmers.co.kr

솔직히 그림이 없으면 문제 이해를 하기가 살짝 어려운데 위 사이트에 들어가면 아주 친절하게 그림으로도 보여준다.

 

 

문제 해결 논리

 

1. left와 right가 있는 행과 열을 각각 조사한다. 행은 left값 / n(전체 행렬의 크기)의 몫, 열은 나머지니까 쉽게 구할 수 있다.

2. left값의 행을 찾으면 해당 행은 left 열부터 가장 오른쪽 끝까지 모두 추출한다. 이 때 해당 행 까지는 해당 행의 값이고 그 이후부터는 +1씩 해서 점점 숫자가 커지니까 이 부분을 주의한다.  예를 들어서, 만약 전체 크기가 5x5이고 만약 지금 left값이 11라면 이는 3째 행 2째 열의 값이 된다. 3째 행은 33345 인데, 2째 열(left 열값)부터 3째 열(left의 행값)까지는 3(left의 행값)이고 그 이후는 4, 5 로 그냥 열값이 된다. 만약 지금 left값이 13이라면 이는 3째 행 4째 열의 값이다. 따라서 그런 경우에는 그냥 열 값만 추출해 오는 방식으로 해야한다.

3. left행과 right 행 사이의 경우는 그냥 규칙에 따라 추출해온다. k째 행의 0째 열부터 k째 행까지는 k, 그 이후는 열값.

4. 2번을 참고해 right값의 행에서도 적당한 수열만 추출한다.

 

이 때 주의할 점은, left와 right가 한 행에 같이 있는 경우이다. 위 논리에 따르면 left값이 있는 행은 무조건 오른쪽 끝까지 모든 값을 추출하므로 left와 right가 있는 경우에는 그렇지 않게 작동하도록 if문을 추가해야한다.

 

 

if문이 많이 들어가고 배열 문제라서 인덱스가 헷갈려서 풀기가 살~짝 까다로운 문제이다. 그래도 코테 공부 좀 했다 싶은 사람은 30분안에는 풀어야하는 문제가 아닌가 싶다. 다시말해 엄청 까다로운 구현은 아니라고 생각한다.

728x90