풀이 코드만 궁금한 분은 깃허브 링크 눌러주세요
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분안에는 풀어야하는 문제가 아닌가 싶다. 다시말해 엄청 까다로운 구현은 아니라고 생각한다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 네트워크 문제 풀이/코드, 파이썬, BFS! LV3같지 않은 LV3문제 (0) | 2022.06.06 |
---|---|
행렬 테두리 확인하기 풀이/코드 (파이썬) 쉬운데 어렵게 푼 문제 LV2 (0) | 2022.02.16 |
프로그래머스 아이템 줍기 풀이/해설 (파이썬) 간단한 코드! + 잡담 (0) | 2021.11.01 |
프로그래머스 10주차 교점에 별 만들기 풀이/코드 (파이썬) (0) | 2021.10.28 |
프로그래머스 단어 변환 문제 해설/코드 (파이썬), BFS활용문제 (0) | 2021.10.12 |