티스토리 뷰
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의 최댓값이 1000만이다.
배열을 직접 만들고 숫자를 채워넣는다면 배열을 만드는데만 O(n^2)로 엄청나게 오랜 시간이 걸린다.
문제에서 주어진 조건 중 right - left < 10^5 가 있는데 이 뜻은 최종적으로 리턴할 answer 벡터의 최대 크기가 100000라는 것이다.
따라서 이 문제는 배열을 직접 만드는게 아니고
1) 주어진 left와 right가 배열의 몇행 몇열인지 판단하고,
2) 배열의 r행 c열에 숫자 몇이 들어있는지를 판단할수 있어야 한다.
1)번은 left,right의 나눈 몫과 나머지로 알 수 있다.
left의 행을 left_r, 열을 left_c라고 하면
left_r = left / n
left_c = left % n 이다.
2)번은 그림을 그려보면 알 수 있는데 n = 4라고 하면 다음과 같은 배열일 것이다.
1 | 2 | 3 | 4 | 5 |
2 | 2 | 3 | 4 | 5 |
3 | 3 | 3 | 4 | 5 |
4 | 4 | 4 | 4 | 5 |
5 | 5 | 5 | 5 | 5 |
각 행을 보면, 행과 열이 같은 지점까지는 열번호가 들어가고,
그 이후부터는 열번호가 들어간다.
예를들어 3행을 보면 3열까지는 3이고,
그 이후 부터, 즉 4열은 4, 5열은 5 ...
// 추가
다른 분들의 코드를 보니 2번은 그냥 행과 열 중 큰값에 +1한 것으로 판단할수 있다.
'PS' 카테고리의 다른 글
프로그래머스. 외벽점검 (0) | 2022.01.21 |
---|---|
프로그래머스. 다단계 칫솔 판매 (0) | 2022.01.20 |
프로그래머스. 정수 삼각형 (0) | 2022.01.18 |
프로그래머스. 2xn 타일링 (0) | 2022.01.18 |
프로그래머스. 섬 연결하기 (0) | 2022.01.18 |
- Total
- Today
- Yesterday
- greedy
- back tracking
- 이분탐색
- Tree
- 자료구조
- Implementation
- Spring
- C++
- permutation
- CSS
- db
- priority queue
- Unity
- graph
- Brute Force
- Kruskal
- recursion
- 재귀
- two pointer
- binary search
- floyd warshall
- Stack
- dfs
- 조합
- C
- DP
- Python
- MVC
- Dijkstra
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |