https://www.acmicpc.net/problem/4779
나는 파일로 인풋을 받아야 한다고 생각해서 파일로 인풋을 받고, 경로는 절대 경로를 설정했었다.
그래서 이거를 파일로 인풋 받지 않는 걸로 수정하니 해결 되었다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class Main {
// 3등분 하고
// 가운데 공백으로 바꾸고
// 선 길이가 1일때 까지 반복
// 가운데에 해당하는거는 False으로 바꾸는 메서드
private static void change(List<Boolean> A, int start, int end){
for(int i = start; i <= end; i++){
A.set(i, Boolean.FALSE);
}
}
// 배열의 길이가 1보다 크다면 나누는 메서드
private static void divide(List<Boolean> A, int start, int end){
if (start < end){
int border = (end - start) / 3;
divide(A, start, start + border);
divide(A, end - border, end);
change(A, start + border + 1, end - border - 1);
}
}
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = reader.readLine()) != null) {
int N = (int) Math.pow(3, Integer.parseInt(line));
List<Boolean> A = new ArrayList<>();
for(int i = 0; i < N; i++){
A.add(Boolean.TRUE);
}
divide(A, 0, N - 1);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i ++){
sb.append(A.get(i) ? "-" : " ");
}
System.out.println(sb);
}
}
}
리스트로 하는거 괜찮나? -> 난 리스트를 생각했는데, 다른 사람의 풀이를 보니 String으로 한 사람도 있다.
리스트로 한다면, Character or Boolean -> 공간 복잡도를 생각했을 때, Boolean이 1Byte, Character이 2Byte여서 Boolean으로 했다.
근데 Character로 해서 저기 마지막에 스트링으로 합치는거가 필요 없는 건가? 알아본 결과, Character로 해도 필요했음. 만약 방법이 있다면, Character로 하는게 효율적인가?
지피티한테 물어보니까 이러네
리스트를 사용하는 것이 괜찮은 선택일 수 있습니다. 문제를 해결하는 데에 가장 편리하고 이해하기 쉬운 자료구조를 선택하는 것이 중요합니다. 리스트를 사용하면 배열의 크기를 동적으로 조절할 수 있고, 각 요소에 쉽게 접근할 수 있습니다.
Boolean과 Character 중에서 Boolean을 선택한 이유는 메모리 사용 측면에서 더 효율적일 것으로 예상되기 때문입니다. Boolean은 1 byte의 메모리를 사용하고, Character는 2 byte의 메모리를 사용합니다. 따라서 같은 개수의 요소를 저장할 때, Boolean을 사용하는 것이 메모리 측면에서 더 효율적입니다.
마지막에 문자열로 변환하는 작업은 필요합니다. 문자열로 변환하지 않고 리스트를 그대로 사용하는 것도 가능하지만, 일반적으로 결과를 출력하거나 다른 작업에 쉽게 활용하기 위해 문자열로 변환하는 것이 편리합니다. 또한, 문제의 출력 형식이 문자열로 주어졌을 경우에는 문자열로 변환하는 것이 필수적입니다. 따라서 마지막에 리스트를 문자열로 변환하는 작업은 필요합니다.
종합적으로, 리스트를 사용하여 Boolean으로 구현하는 것은 효율적이고 적절한 선택이라고 할 수 있습니다.