일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 시큐리티 로그인
- programmers
- 2차원배열
- StyleSheet
- codingtest
- JAVA11
- springboot
- css
- 스프링 부트
- 프로그래머스
- 리눅스
- input태그
- 목록
- security
- Spring boot
- 시큐리티
- javascript
- 싱글톤
- java
- html
- 로그인
- 코딩테스트
- 소스트리
- sql
- Linux
- 시큐리티 로그아웃
- springSecurity
- 시큐리티로그인
- 반복문
- gradle
Archives
- Today
- Total
JAVAIARY
프로그래머스 ) n^2 배열 자르기 본문
문제: https://school.programmers.co.kr/learn/courses/30/lessons/87390
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
class Solution {
public long[] solution(int n, long left, long right) {
long[] answer = new long[(int) (right - left + 1)];
long rw = left /n; // 시작 행
long clmn = left % n; // 시작 열
int i = 0;
// 시작 clmn이 0일 경우 반복문에서 바로 행이 증가되기 때문에 우선 1회 실행
answer[i] = Math.max(rw, clmn) + 1;
clmn++;
i++;
while (i < right - left + 1) {
clmn = clmn == n? 0 : clmn; // 0 열로 초기화
rw = clmn ==0? rw+1 : rw; // clmn이 0일 경우 다음 행으로 이동
answer[i] = Math.max(rw, clmn) + 1;
clmn++;
i++;
}
return answer;
}
}
- 시작행을 left/n, 열을 left%n잡고 1씩 증가 시키는 방향으로 가닥을 잡았음
- 다음 배열의 행 , 열을 잡기가 힘들어서 clmn 이 n 초과 되면 초기화를 시켜주는 방식으로 해결
Math.max((left+i)/n, (left+i)%n)+1
- 좀 더 생각해 봤다면 left+i 자체를 나누는 방식으로 해결할 수 있었을 것 같다.
'examplePractice' 카테고리의 다른 글
프로그래머스 ) 최소 직사각형 (0) | 2023.04.04 |
---|---|
프로그래머스 ) 이진 변환 반복하기 (0) | 2023.04.04 |
프로그래머스) 크레인 인형뽑기 게임 (0) | 2023.03.22 |
프로그래머스) 성격유형 검사하기 (0) | 2023.03.21 |
프로그래머스) OX 퀴즈 (0) | 2023.03.21 |