728x90
반응형
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/181913#
foreach문을 사용해 queries값을 하나씩 받아와 answerArray에 tempArray의 값을 query[1]값부터 query[0]까지 대입하도록 했다.
처음 코드는 아래와 같이 작성했다.
public String solution(String my_string, int[][] queries) {
char[] tempArray = my_string.toCharArray();
char[] answerArray = tempArray;
for (int [] query:queries) {
for (int i = 0; i <= query[1] - query[0]; i++)
answerArray[query[0] + i] = tempArray[query[1] - i];
tempArray = answerArray;
}
return String.copyValueOf(answerArray);
}
위 코드는 결과가 제대로 출력되지 않았다.
for문을 처음 돌 때는 제대로 값이 넣어졌지만 그 이후부터는
answerArray의 값만 변경되어야 하는데 tempArray의 값이 같이 변경되었다.
두가지 이유가 있는데
첫번째는 처음 answerArray를 선언하고 값을 할당할 때 tempArray를 값으로 주었는데
이런식으로 값을 주는 과정에서 tempArray와 answerArray가 같은 객체를 참조하게 되었기 때문이다.
마찬가지로 두번째 이유는 이중포문에서 내부 포문이 다 돌고나면 tempArray에 answerArray의 값을 대입하도록 하였는데
이 과정에서 tempArray가 answerArray와 같은 객체를 참조하게 되었기 때문이다.
그래서 answerArray의 값을 변경하면 tempArray값이 같이 변경되었던 것이다.
answerArray를 직접 대입하는 대신 clone() 메소드나 Array.copyOf() 메소드를 사용하는 방법이 있었는데
Array.copyOf는 Object 배열에 대해서만 사용가능하다고 하여
배열의 자료형에 상관없이 사용가능한 clone() 메소드를 사용하여 해결하였다.
class Solution {
public String solution(String my_string, int[][] queries) {
char[] tempArray = my_string.toCharArray();
char[] answerArray = my_string.toCharArray();
for (int [] query:queries) {
for (int i = 0; i <= query[1] - query[0]; i++)
answerArray[query[0] + i] = tempArray[query[1] - i];
tempArray = answerArray.clone();
}
return String.copyValueOf(answerArray);
}
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준 10988] 팰린드롬인지 확인하기, StringBuilder.reverse() (4) | 2024.08.19 |
---|---|
[백준 15552] 빠른 A+B, BufferedReader, BufferedWriter (2) | 2024.07.24 |
스택과 큐 (0) | 2023.08.24 |
구간 합 (0) | 2023.08.09 |
시간복잡도 - 시간 복잡도 유형(빅오메가, 빅세타, 빅오), 시간 복잡도 도출 기준 (0) | 2023.08.08 |