일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 코테
- 구현
- BFS
- 독학
- c++
- 카카오코테
- SWIFT
- SQLD
- 부주상골
- 리눅스
- 프로그래머스
- 분할정복
- DFS
- IOS
- 부주상골수술
- 백준
- 카카오인턴
- 독일어독학
- istringstream
- 코딩테스트
- 부주상골증후군
- 세브란스
- sql
- 카카오인턴십
- 스택
- 독일어
- 부주상골수술후기
- dp
- 롯데정보통신
- ChatGPT
Archives
- Today
- Total
슈뢰딩거의 고등어
[프로그래머스] n^2 배열 자르기 본문
https://programmers.co.kr/learn/courses/30/lessons/87390
[풀이방법]
위의 애니메이션을 보면 1행, 2행, ... n행을 붙여 1차원 배열을 만들게 되면
1, 2, ... n | 2, 2,... n | 3, 3, 3, ... n |n, n, n, ... n, n, n|
이런식으로 배열이 생기게 되는데
x행의 경우, x를 x번 반복한 후(x, x, ..., x) x+1, x+2... n까지의 수를 한번씩 반복하게 된다.
따라서, 시작하는 좌표(left_y, left_x)를 구한 후, right_y 까지의 수를 append 하면 된다.
그렇게 되면 두번째 예시일때,
1 | 2 | 3 | 4 |
2 | 2 | 3 | 4 |
3 | 3 | 3 | 4 |
4 | 4 | 4 | 4 |
(두번째줄 4번째칸 ~ 4번째줄 전체)
4 | 3, 3, 3, 4 | 4, 4, 4, 4 |
가 되는데 총 구해야 하는 배열의 길이는 left - right+1 이기 때문에, 위에서 append 하여 저장한 vector 의 0~left - right+1 까지의 값들을 답으로 리턴해주면 된다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int n, long long left, long long right) {
vector<int> answer;
int left_y = left / n;
int left_x = (left % n)+1;
int right_y = right / n;
int y = left_y;
int x = left_x;
while(y <= right_y) {
for(int i=x; i<=n; i++) {
if(i<y+1)
answer.push_back(y+1);
else
answer.push_back(i);
}
y += 1;
x = 1;
}
vector <int> ret;
for(int i=0; i<right-left+1; i++)
ret.push_back(answer[i]);
return ret;
}
'알고리즘' 카테고리의 다른 글
[2022 KAKAO TECH INTERNSHIP] 성격 유형 검사하기 (Python3) (0) | 2022.10.22 |
---|---|
[프로그래머스] DFS 여행경로 (C++ / Python3) (0) | 2022.07.02 |
[프로그래머스 ]동적계획법(Dynamic Programming) > 등굣길 (0) | 2022.05.22 |
[프로그래머스] 2021 Dev-Matching: 웹 백엔드 개발자(상반기) > 다단계 칫솔 (0) | 2022.05.22 |
[프로그래머스] 힙(Heap) > 디스크 컨트롤러 (0) | 2022.05.13 |
Comments