문제 : boj25314
필요 알고리즘 개념
- 입력받기, 반복문
- 숫자를 입력받을 수 있고, 반복문을 사용할 수 있다면 풀 수 있다.
※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다.
풀이
사실 같은 브론즈5인 1000번 A+B에 비해선 많이 어렵다(?). N을 입력받아 숫자로 변경해야 하고, 그걸 4로 나눠야 하며 반복문을 통해 N/4번 "long "을 출력해준 후 "int"를 출력해줘야 한다.
알고리즘적으로는 딱히 설명할게 없다. 이하 코드에서 설명할 만한 부분들은 왜 solution 함수에 작성했는지, BufferedReader는 왜 쓴건지.. 이런 부분들인데 그건 위에 '필요 알고리즘 개념'쪽에 링크 걸려있는 '자바로 백준 풀 때의 팁 및 주의점'을 참고해보자.
내 경우엔 StringBuilder를 사용해 문자열을 붙여서 한번에 출력해줬다. 하지만 일반적으로는 그냥 바로바로 System.out.print()를 해줘도 된다. 주의점은 System.out.println()은 ln이 line의 의미로 개행문자를 뒤에 붙인걸 출력한다. 따라서 이 문제에서 long long long... int 처럼 붙이려면 ln을 뺀 System.out.print()를 사용해줘야 한다. StringBuilder를 쓴 이유는 더 빨라서이다.
TMI. 자바에서 String은 애초에 final 객체이다.
즉 "long " + "long "처럼 String 끼리의 '+' 해준다면, 처음 "long "이 String 하나, 그 다음 "long "도 String 하나(실제론 String.intern()을 통해 저렇게 리터럴로 작성한건 하나의 String이긴 하지만, 일단 개념적으로 설명하고 있다.), 합쳐진 "long long "도 또 다른 String이 된다. 그럼 "long "을 100번 출력해야 한다면 ? 대략 스트링 199개가 생성된다(실제론 intern 때문에 100개정도긴 하다). 메모리도 비효율적이고 매번 붙일 때 마다 모든 character를 읽어야 하므로 시간도 오래걸린다.
반면에 StringBuilder는 애초에 배열로 되어있다. (같은 제품으로 StringBuffer도 있다. thread-safe의 차이이다.)
따라서 여러 String이나 클래스들을 합쳐야할 경우, String에 합치는 것 보다 월등하게 StringBuilder를 사용하는게 더 빠르다. 즉, 매번 새로 붙인걸 만드냐 vs 애초에 가변형으로 만들어 붙이냐의 차이이다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n/4; i++) {
sb.append("long ");
}
sb.append("int");
System.out.println(sb);
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 20955 - 민서의 응급 수술 (java) (0) | 2022.07.31 |
---|---|
[자바] 백준 23303 - 이 문제는 D2 입니다. (java) (0) | 2022.07.30 |
[자바] 백준 21918 - 전구 (java) (0) | 2022.07.28 |
[자바] 백준 22943 - 수 (java) (0) | 2022.07.28 |
[자바] 백준 24839 - Speed Typing (java) (0) | 2022.07.27 |
댓글