일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 서블릿
- sts
- 네이버
- P Stage
- cs50
- 파이썬
- 백엔드
- 2021 Dev-matching 웹 백엔드 개발자
- 서버
- 웹 프로그래밍
- 웹
- AI Tech 4기
- QNA 봇
- Django
- 구현
- Naver boostcamp
- 장고
- AI Tech
- 부스트캠프
- BOJ
- 백준
- Customer service 구현
- 4기
- Naver boostcourse
- 레벨2
- 대회
- boostcourse
- 프로그래밍
- 프로그래머스
- 풀스택
Archives
- Today
- Total
daniel7481의 개발일지
[프로그래머스]n^2 배열 자르기 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/87390
풀이
하드코딩 구현 문제였다. 방법 자체는 생각하기 쉬우나 구현하기가 좀 까다러웠다. 2차원 배열이 1차원으로 옮겨갈 때 각 원소들이 어떤값을 가질까가 관건이었는데, 먼저 시작 인덱스를 정해야했다. 행과 열(i, j)는 각각 left//n, left%n이다. 2차원을 1차원으로 옮길때 행과 열의 성질을 생각해보면 쉽게 구할 수 있다. 이제 시작 인덱스를 알았으니 행과 열의 대소 관계에 따른 2차원 원소의 값을 생각해보면, 만약 i가 j보다 작거나 같다면 원소는 j의 값을 갖는다(j열의 원소들은 j행까지 j이다). 반대로 i가 j보다 크다면 i의 값을 갖는다(i행의 원소들은 i열까지 i의 값을 갖는다). 이 성질을 이용하여 i, j를 하나씩 이동시켜주며 만약 열 인덱스가 매트릭스를 벗어난다면 행 인덱스를 하나 더해주고 0으로 바꿔주는 연산을 하고, 이 과정을 right-left+1만큼 해주어야하기 때문에 while문을 돌려주면 정답을 얻을 수 있다.
def solution(n, left, right):
answer = []
i = left//n
j = left%n
cnt = 0
while cnt < right-left+1:
if i <= j:
answer.append(j+1)
else:
answer.append(i+1)
j += 1
if j == n:
j = 0
i += 1
cnt += 1
return answer
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스]쿼드 압축 후 개수 세기 (0) | 2022.08.16 |
---|---|
[프로그래머스]키패드 누르기(2020 카카오 인턴쉽) (0) | 2022.08.12 |
[프로그래머스]후보키 (0) | 2022.08.02 |
[프로그래머스]섬 연결하기 (0) | 2022.07.31 |
[프로그래머스]소수 찾기 (0) | 2022.07.31 |