자바 알파벳 아스키코드 - jaba alpabes aseukikodeu

[백준] 11654번 : 아스키 코드 - JAVA [자바]

  • 2020.03.16 11:39
  • JAVA - 백준 [BAEK JOON]/문자열

11654번: 아스키 코드

알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

자바 알파벳 아스키코드 - jaba alpabes aseukikodeu

  • 문제

자바 알파벳 아스키코드 - jaba alpabes aseukikodeu

매우매우 쉬운 문제다!

 주의할 점

  1. 출력하는 값은 주어진 입력에 대한 아스키 코드 값이다.

  • 2가지 풀이방법을 제시한다.

먼저 특별한 알고리즘은 없기 때문에 바로 코드를 보여줄 것인데 그 전에 아래에 필자가 포스팅한 입력에 대해서 한 번은 꼭 읽어보길 권장한다.

https://st-lab.tistory.com/41?category=830901

JAVA [자바] - 입력 뜯어보기 [Scanner, InputStream, BufferedReader]

이 글을 지금 이 시점에 써야 할까 고민을 많이 했다. 사실 자바를 그냥 다룰 줄만 아는 것에 목표를 둔다면 이 글이 무의미할 수도 있다. 그러나 자바에 대해 조금이라도 관심이 있고 더 배우고 싶은 분들도 있겠..

st-lab.tistory.com

자바 알파벳 아스키코드 - jaba alpabes aseukikodeu

왜냐하면 우리가 보통 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 으로 처리해도 된다.


  • 성능
자바 알파벳 아스키코드 - jaba alpabes aseukikodeu


위에서 부터 순서대로

채점 번호 : 18456788  -  System.in

채점 번호 : 18456786  -  Scanner

보면 알 수 있듯이 Scanner 가 단일 문자 하나 처리함에도 시간 차이가 저렇게 난다는 것을 알 수 있다.


  • 정리


보통 입력을 Scanner 로만 배우셨던 분들이라면 대부분 Scanner 로 풀었을 것이다.

그렇게 풀어도 물론 문제는 없다.

하지만 입력에 대한 어느정도 지식이 있는 분들이라면 더 시간을 단축시킬 수 있고, 굳이 긴 코드를 필요로 하지 않기 때문에 덜 번거로울 수 있다는 장점이 있다.

그렇기에 필자가 입력 뜯어보기 포스팅을 꼭 읽어보라고 하는 것이다.

안녕하세요

JAVA에서 아스키코드와 유니코드의 개념 및 char를 이용한 문자, 숫자로 변환하는 방법에 대해서 알아보겠습니다

아스키코드

미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( /ˈæski/, 아스키)는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 아스키는 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 아스키에 기초를 두고 있다.

아스키는 7비트 인코딩으로, 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 총128개로 이루어진다. 제어 문자들은 역사적인 이유로 남아 있으며 대부분은 더 이상 사용되지 않는다. 출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자로 이루어진다.

아스키가 널리 사용되면서 다양한 아스키 기반의 확장 인코딩들이 등장했으며, 이들을 묶어서 아스키라고 부르기도 한다. 대표적으로 7비트 인코딩을 유지한 ISO/IEC 646과, 원래 아스키 코드 앞에 비트 0을 넣어 8비트 인코딩을 만든 IBM 코드 페이지와 ISO 8859가 있다. 이 인코딩들은 언어군에 따라 같은 숫자에 서로 다른 문자가 배당된 경우가 많다.

ko.wikipedia.org/wiki/ASCII 

출처 : 위키백과 

간단하게 말하면 컴퓨터는 문자를 문자로 받아들이는 것이 아닌 숫자로 받아들입니다

문자를 숫자로 표현한 것을 아스키코드라고 합니다

하단은 아스키코드 표입니다

자바 알파벳 아스키코드 - jaba alpabes aseukikodeu

유니코드

유니코드(영어: Unicode)는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이며, 유니코드 협회(Unicode Consortium)가 제정한다. 또한 이 표준에는 ISO 10646 문자 집합, 문자 인코딩, 문자 정보 데이터베이스, 문자들을 다루기 위한 알고리즘 등을 포함하고 있다.

또한 유니코드의 목적은 현존하는 문자 인코딩 방법들을 모두 유니코드로 교체하려는 것이다. 기존의 인코딩들은 그 규모나 범위 면에서 한정되어 있고, 다국어 환경에서는 서로 호환되지 않는 문제점이 있었다. 유니코드가 다양한 문자 집합들을 통합하는 데 성공하면서 유니코드는 컴퓨터 소프트웨어의 국제화와 지역화에 널리 사용되게 되었으며, 비교적 최근의 기술인 XML, 자바, 그리고 최신 운영 체제 등에서도 지원하고 있다.

ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C

출처 : 위키백과

아스키코드는 대부분의 컴퓨터에서 범용적으로 사용하느 코드라면 유니코드는 최근 기술인 XML, 자바, 최신 운영체제에서 사용되는 코드라 할 수 있습니다

여기까지 아스키코드와 유니코드의 설명을 마쳤습니다

이어서 유니코드 문자 -> 숫자로 변환, 숫자 -> 문자로 변환하는 방법에 대해서 알아보겠습니다

public class Ascii {
	public static void main(String[] args) {	
		System.out.println("유니코드 숫자 : " + ((int) "A".charAt(0)));
		System.out.print("유니코드 문자 : " + ((char) 65));
	}
}

위의 방법을 사용해서 간단하게 문자, 숫자로 변환할 수 있습니다

이 방법을 응용하면 다양한 문제들도 간단하게 풀 수 있습니다 ㅎ

여기까지 유니코드의 문자, 숫자 변환 방법에 대해서 알아봤습니다

혹시라도 설명에 있어서 틀린 부분이 있다면 댓글 남겨주시면 감사하겠습니다

이 글이 JAVA 프로그래밍에 있어서 참고가 되셨으면 좋겠습니다