문제
알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.
<작성 답안>
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int N = s.nextByte();
System.out.println("N");
}
}
에러가 뜬다..
-> 우선 값을 어떤 함수로 받아야하는지 모르겠다.
-> 받은 값을 문자열로 바꾸는 법도 모르겠다.
- 풀이
- 방법 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() 으로 문자로 잘라내주어야 한다.(charAt(0)은 문자열의 0번째 있는 값을 데려와라는 뜻)
즉, 과정은 아래와 같다.
[입력] 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 으로 처리해도 된다.
<개인 정리>
system.in 과 Scanner의 내부를 뜯어보는 글을 읽고 왔다. 벌써 두번째인데 확실히 System.in이 inputStream 타입의 참조변수를 통해 Scanner가 객체의 객체를 통해 문자를 긁어 오는 것이었다.
그리고 문자열을 입력받는 함수는 s.next(), 그리고 문자열을 잘라주는 함수는 charAt();
(charAt(0)은 문자열의 0번째 있는 값을 데려와라는 뜻)
밑에 있는 read()함수도 찬찬히 읽어보면서 이해해보려 햇으나 솔직히 와닿지 않는다. 예외처리도 있고해서 예외처리에 대한 개념이 잡혀야 이 함수에 대한 이해도 온전히 될 듯 싶다.
다음에 이런 유형의 문제를 만나 뜯어봤을 때는 이해되었는 상태로 만나고 싶다.
정답, 풀이 출처: https://st-lab.tistory.com/59
'📟java > 백준' 카테고리의 다른 글
백준 1157 자바 (0) | 2022.11.11 |
---|---|
백준 10809 자바 (0) | 2022.11.10 |
백준 1065 자바 (0) | 2022.11.10 |
백준 15596 자바 (0) | 2022.11.09 |
백준 4344 자바 (0) | 2022.11.09 |