728x90
반응형
문제
정답 풀이
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // 바구니 개수
int M = Integer.parseInt(st.nextToken()); // 반복 횟수
int[] basket = new int[N]; // 바구니 배열
int[] newBasket = new int[N]; // 결과 바구니 배열
// 바구니에 값을 1부터 N까지 담는다
for(int a = 0; a < basket.length; a++){
basket[a] = a+1;
}
for(int b = 0; b < M; b++){
st = new StringTokenizer(br.readLine());
int i = Integer.parseInt(st.nextToken())-1;
int j = Integer.parseInt(st.nextToken())-1;
int k = Integer.parseInt(st.nextToken())-1;
// i를 기준으로 반복문을 돌려야 하기에 따로 저장
int i1 = i;
// 바구니가 바뀌는 횟수
for(int c = 0; c < j-i+1; c++){
// k부터 j까지
if(c+k <= j){
newBasket[c+i] = basket[c+k];
}
// i부터 k까지
else {
newBasket[c+i] = basket[i1];
i1++;
}
}
// 회전 범위에 속하지 않을 경우
for(int d = 0; d < N; d++){
if(newBasket[d] != 0){
basket[d] = newBasket[d];
}
}
}
for(int e = 0; e<basket.length; e++){
bw.write(basket[e]+" ");
}
br.close();
bw.flush();
bw.close();
}
}
- 메모리 15924KB
- 시간 144ms
처음으로 이틀 동안 이 문제를 붙잡고 하 왜 안되지 왜 오류나지 왜 결과값이 다르지 왜왜왜 ????를 반복했습니다..
저는 basket을 출력하는 것이 아닌 newBasket을 출력하려고 했어요.
그래서 회전 범위에 속하지 않을 떄의 for문을
// 회전 범위에 속하지 않을 경우
for(int d = 0; d < N; d++){
if(newBasket[d] == 0){
newBasket[d] = basket[d];
}
}
이렇게 작성했는데 결과값이 이상하게 나오더라고요
전 아직도 뭔 차이인지 모르겠는데 그냥 체념하고 basket을 출력했습니다.
문제를 이해하는데도 오래 걸렸어요..
i부터 j까지 바구니를 바꿀건데 k를 기준으로 해서
i와 k바꾸고, i+1과 k+1바꾸고 1+2와 k+2바꾸고를 반복하는 거에요
인덱스도 헷갈려서 -1, +1...(혼돈)
막상 풀고나니 그렇게 어려운 건 아니였나 싶기도 하고...(대혼돈)
암튼 풀었습니다!!
728x90
반응형
'Computer Science (CS) > 알고리즘' 카테고리의 다른 글
[백준/Java] 1157번 단어 공부 (0) | 2023.05.09 |
---|---|
[백준/Java] 10988번 팰린드롬인지 확인하기 (0) | 2023.05.09 |
[백준/Java] 2444번 별찍기 - 7 (0) | 2023.05.06 |
[백준/Java] 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰 (1) | 2023.05.06 |
[백준/Java] 25083번 새싹 (2) | 2023.05.06 |