티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/87390
코딩테스트 연습 - n^2 배열 자르기
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다. 1행 1열부
programmers.co.kr
문제 설명
정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다.
- n행 n열 크기의 비어있는 2차원 배열을 만듭니다.
- i = 1, 2, 3, ..., n에 대해서, 다음 과정을 반복합니다.
- 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다.
- 1행, 2행, ..., n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다.
- 새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left+1], ..., arr[right]만 남기고 나머지는 지웁니다.
정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요.
![](https://blog.kakaocdn.net/dn/bp6yA0/btrtBO4xGWa/JYFKFwy3LTAbDaoWStKcvK/img.png)
문제 풀이
문제에서 주어진 조건을 구현하며 따라가다 보면 쉽게 구현할 수 있는데 제한 조건을 보게 되면 n의 크기가 최대 10^7이기 때문에 이중 for문을 사용해서는 절대 문제를 해결할 수 없다.
그러므로 문제에서 규칙을 찾는 것이 중요하다. n이 3, 4, 5일 때를 그려보면 특정한 규칙이 보이는 것을 알 수있다. 해당 숫자가 위치한 자리의 x축 y축 좌표를 구해서 둘 중 더 큰 좌표값을 기준으로 +1을 하게되면 해당 자리에서의 값을 알 수 있다. 문제를 그려보지 않고 규칙을 찾기는 굉장히 힘들 것 같다 !
프로그래머스 채점 시스템에서 약간의 오류가 있는 것 같다. TC 12,13번이 계속해서 런타임 에러가 발생하는데 반복문을 도는 과정에서 left와 right에 int로 명확하게 형 변환을 시켜주면 테스트 케이스가 통과한다.
def solution(n, left, right):
answer = []
for num in range(int(left), int(right)+1):
i, j = num // n, num % n
cnt = max(i,j) + 1
answer.append(cnt)
return answer
'알고리즘' 카테고리의 다른 글
[프로그래머스] 프렌즈 4블록 - 파이썬 (0) | 2022.02.20 |
---|---|
[프로그래머스] 점프와 순간 이동 - 파이썬 (0) | 2022.02.17 |
[프로그래머스] 영어 끝말잇기 - 파이썬 (0) | 2022.02.09 |
[프로그래머스] 삼각 달팽이 - 파이썬 (0) | 2022.02.08 |
[프로그래머스] 2개 이하로 다른 비트 - 파이썬 (0) | 2022.02.08 |
- Total
- Today
- Yesterday
- 환경 별 로깅 전략 분리
- 팀프로젝트
- 8주차 회고
- 네트워크
- java
- CI/CD
- 알림기능개선기
- 런칭 페스티벌
- ZNS
- 피움
- 5주차 회고
- 백준
- dm-zoned
- 프로젝트
- 파이썬
- 스프링MVC
- 스프링 프레임워크
- jpa
- 스프링 부트
- 2차 데모데이
- 우테코 회고
- 알림개선기
- 스프링 Logback
- ZNS SSD
- 피움 6주차 회고
- dm-zoned 코드분석
- Spring
- 3차 데모데이
- 우테코
- 회고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |