| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 생활코딩
- Repository
- 런타임에러
- 문자열 반복문
- JDoodle
- 일관성
- putty
- 백준 문자열
- 가독성
- spring
- StringBuilder
- RestController
- Generic
- mobaXterm
- 문자열
- 다이얼
- Service
- reverse()
- redis
- JAVA 설치
- 생성형AI
- prettier
- SPLIT
- 백준
- StringTokenizer
- Component
- outfitanyone
- Java
- Controller
- vscode
- Today
- Total
gone
#[백준] 11654 아스키 코드 본문
11654번: 아스키 코드
알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.
www.acmicpc.net

제출 1) 에러
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String input = bf.readLine();
System.out.println(input.charAt(0));
// System.out.println(input.charAt(0) -'0');
}
}
input.charAt(0) 는 입력된 문자열의 첫번째 문자를 가져온다.
input.charAt(0) -'0' 는 입력된 문자열의 첫번째 문자를 가져오고 거기에 '0'의 아스키코드를 뺀 값. (해당숫자가 나타내는 숫자값을 나타냄)
제출 2) 성공
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner in = new Scanner(System.in);
int chr = in.next().charAt(0);
System.out.println(chr);
in.close();
}
}
## 오답노트
같은 String.charAt(0)을 이용한 메소드를 사용했는데 결과 값이 다를까?
우선 Stream(데이터의 흐름) 의 개념을 파악해야한다. (이 부분은 " Stranger's LAB" 에 자세히 설명되어있다.)
아래는 현재 코드에 필요한 부분만 발최해서 가져왔다.
1. InputStream 은 바이트 단위로 데이터를 처리한다. 또한 System.in 의 타입도 InputStream 이다.
2. InputStreamReader 은 문자(character) 단위로 데이터를 처리할 수 있도록 돕는다. InputStream 의 데이터를 문자로 변환하는 중개 역할을 한다.
3. BufferedReader 은 스트림에 버퍼를 두어 문자를 버퍼에 일정 정도 저장해둔 뒤 한 번에 보낸다.
위 글을 통해서 내가 알게 된 사실은
BufferedReader은 [입력값]을 "문자열"을 반환하여 String.charAt(0) 을 했을 때 첫번째 문자가 추출되고,
Scanner은 scanner.next() 메서드가 [입력값]이전의 공백/줄바꿈 까지 문자열로 반환하기 때문에 String.charAt(0) 을 했을 때 문자열에서 첫번째 문자 "문자"을 가져와 아스키코드로 출력한다는 것이다.
(다시 정리해보자면 BufferedReader 는 입력된 값을 그대로 문자열로 받아오지만, Scanner은 기본적인 공백이나 엔터를 경계로 입력을 받기때문에 두 방식의 동작이 다르다는 것!!)
제출3)
public class Main {
public static void main(String[] args) throws Exception {
int a = System.in.read();
System.out.print(a);
}
}
오답노트에서 설명한내용을 축약하면 위의 코드와같다.
System.in 이 InputStream 타입이기때문에 입력후 반환하면 아스키코드가 출력이 된다는 사실!!

제출2) 와 제출3) 의 결과이다. Scanner은 정규식검사와 같은 복잡한 로직으로 인해 메모리와 시간이 많이 들어간다는 사실을 다시 한번 깨닫게 해준다.
우리가 구하는 문제는 단순 아스키코드를 출력하는 문제이므로 scanner를 이용한 문자 입력은 필요없는 과정이다.
참고한 블로그) Thanks to Stranger's LAB ❤
Stranger's LAB
프로그래밍과 관련하여 다양한 알고리즘 문제를 풀어보고, 프로그래밍 언어를 이해해 볼 수 있도록 돕고자 만든 블로그 입니다.
st-lab.tistory.com
'알고리즘' 카테고리의 다른 글
| #[백준] 2675 문자열 반복 (StringBuilder 클래스) (0) | 2024.01.11 |
|---|---|
| #[백준] 11720 숫자의 합 (1) | 2024.01.11 |
| #[백준] 10809 알파벳찾기 (0) | 2024.01.11 |