[백준] 11654번 : 아스키 코드 - JAVA [자바]
https://www.acmicpc.net/problem/11654
-
문제
매우매우 쉬운 문제다!
※ 주의할 점
- 출력하는 값은 주어진 입력에 대한 아스키 코드 값이다.
- 2가지 풀이방법을 제시한다.
먼저 특별한 알고리즘은 없기 때문에 바로 코드를 보여줄 것인데 그 전에 아래에 필자가 포스팅한 입력에 대해서 한 번은 꼭 읽어보길 권장한다.
https://st-lab.tistory.com/41?category=830901
왜냐하면 우리가 보통 Scanner 로 입력받지만, 사실 위의 문제의 경우 문자에 대한 아스키코드 값을 출력하면 되기 때문에 굳이 입력을 Scanner 로 받을 이유가 없다.
그래서 일단 Scanner 로 입력받는 방법과 가장 기초입력스트림을 통한 System.in 을 사용하여 입력을 받아볼 것이다.
- 풀이
- 방법 1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int ch = in.next().charAt(0);
System.out.print(ch);
}
}
가장 기본적인 방법이라 할 수 있겠다.
일단 Scanner 에는 문자를 받으려면 nextLine() 이나 next() 를 통해 문자열로 입력받아서 charAt() 으로 문자로 잘라내주어야 한다.
즉, 과정은 아래와 같다.
[입력] String 으로 입력받는다.
-> [charAt()] String 에서 char 로, 즉 문자열을 잘라 문자로 변환한다.
-> int 타입 변수에 저장함으로써 문자에 대응되는 값, 즉 아스키 코드값을 저장한다.
위 코드처럼 짤 수는 있지만 앞서 링크로 포스팅을 보라고 했던 페이지에서 보면 알 수 있듯이 Scanner 자체가 정규식을 남발하면서 좋지 않은 성능을 낸다.
- 방법 2
Scanner 를 쓰지 말고, 가장 기초 입력방법인 System.in 을 쓰는 방법이다.
(사용 방법은 위 링크걸어둔 입력 뜯어보기 포스팅을 보기 바란다)
애초에 System.in 은 byte 값으로 문자 한 개만 읽으면서 해당 문자에 대응되는 아스키코드 값을 저장할 수 있다.
즉 아래와 같이 쓸 수 있다.
public class Main {
public static void main(String[] args) throws Exception {
int a = System.in.read();
System.out.print(a);
}
}
그리고 반드시 주의해야 할 점은 예외처리를 해주어야한다.
IOException (java.io 패키지를 import 해야함) 로 메인 옆에 써주어도 되고, 그냥 Exception 으로 처리해도 된다.
- 성능
위에서 부터 순서대로
채점 번호 : 18456788 - System.in
채점 번호 : 18456786 - Scanner
보면 알 수 있듯이 Scanner 가 단일 문자 하나 처리함에도 시간 차이가 저렇게 난다는 것을 알 수 있다.
- 정리
보통 입력을 Scanner 로만 배우셨던 분들이라면 대부분 Scanner 로 풀었을 것이다.
그렇게 풀어도 물론 문제는 없다.
하지만 입력에 대한 어느정도 지식이 있는 분들이라면 더 시간을 단축시킬 수 있고, 굳이 긴 코드를 필요로 하지 않기 때문에 덜 번거로울 수 있다는 장점이 있다.
그렇기에 필자가 입력 뜯어보기 포스팅을 꼭 읽어보라고 하는 것이다.
'JAVA - 백준 [BAEK JOON] > 문자열' 카테고리의 다른 글
[백준] 1152번 : 단어의 개수 - JAVA [자바] (33) | 2020.03.20 |
---|---|
[백준] 1157번 : 단어 공부 - JAVA [자바] (42) | 2020.03.19 |
[백준] 2675번 : 문자열 반복 - JAVA [자바] (22) | 2020.03.19 |
[백준] 10809번 : 알파벳 찾기 - JAVA [자바] (41) | 2020.03.18 |
[백준] 11720번 : 숫자의 합 - JAVA [자바] (15) | 2020.03.17 |