알고리즘

백준 - 10809번 / 아스키코드, enumerate()

joy_lee 2021. 7. 28. 21:52

아스키코드

 

 

컴퓨터는 문자를 0과 1의 배열로 기억한다. 그렇기 때문에 문자 <-> 숫자로 변환하는 여러 가지 방식이 있는데 아스키코드도 그중 하나이다. 통상적으로 많이 사용되며, 0번~127번까지 사용가능하다.

가끔 아스키코드를 사용해야할 일이 생기는데 A : 65, a : 97 만 기억하면 대부분 해결 가능하다.

 

코딩을 할 수 있으면 굳이 외울 필요가 없다. 문자형으로 저장된 변수를 정수형으로 출력하면 아스키코드 값을 구할 수 있다.

C언어의 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main(void) {
  // 숫자 -> 문자
  int num;
  printf("숫자를 입력하시오: ");
  scanf("%d"&num);
  printf("문자 = %c\n", num);
 
  // 문자 -> 숫자
  char ch;
    printf("문자를 입력하시오: ");
    scanf(" %c"&ch);
    printf("아스키 코드값 = %d\n", ch);
 
  return 0;
}
cs

scanf에서 출력하는 형식을 %c로 하고 정수형 변수를 전달해도 오류가 일어나지 않는다. 해당 숫자의 아스키코드를 출력하기 때문이다.(%d에 문자형 변수를 전달하면 아스키코드 출력함)

 

파이썬의 경우에는 함수를 이용해야한다.

ord(c) : 문자를 입력받아 아스키코드를 출력한다

chr(n) : 숫자(아스키코드)를 입력받아 문자를 출력한다.

1
2
3
4
= input()
print(ord(c))
= int(input())
print(chr(n))
cs

 

문제에서는 아스키코드 값을 물어보는 경우도 있고, 아스키코드를 이용해서 문제를 해결하는 경우도 있다.

 

아스키코드를 활용해서 문제를 해결하는 경우

백준 10809번: 알파벳 찾기 - https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

 

내가 작성한 코드

1
2
3
4
5
6
7
8
9
10
string = input()
s_list = list(string)
position = [-1 for i in range(26)]
for i, s in enumerate(s_list):
    ascii = ord(s)
    index = ascii - 97
    if position[index] == -1:
        position[index] = i
for i in position:
    print(i, end=" ")
cs

문자를 입력받아 한 글자씩 list에 넣는다(s_list)

알파벳 숫자에 맞게 -1을 26개로 초기화한 list를 만든다(position)

문자를 아스키코드로 변환한 후, position의 인덱스로 조회해 초기값(-1)이면 몇 번째 자리에 처음 나왔는지 값을 입력해주고, 초기값이 아니면 pass한다.

소문자만으로 이루어진 단어를 입력한다고 문제에 명시되었으므로, 대문자/소문자인 경우를 따로 고려하지 않았지만 대소문자 구분없이 처음으로 나온 자리수를 구한다고 하면

index = ascii - 97 if ascii >= 97 else ascii - 65

로 index값을 정하면 된다.

 

*enumerate()

list를 입력받아 index와 value를 같이 출력한다.

보통 for문과 같이 사용된다.

1
2
3
4
5
6
string = input()
s_list = list(string)
for p in enumerate(s_list):
    print(p)
for i, s in enumerate(s_list):
    print(i, s)
cs

 

for 다음 변수가 하나면 (index, value)로 이루어진 tuple을 반환하고,

두 개의 변수를 넣어주면 index, value 를 각각 반환한다.

 

 

 

참고한 사이트

https://ooyoung.tistory.com/104

 

파이썬 아스키코드 변환 함수 ord( ), chr( ) (Python)

아스키코드 변환 함수 ord( ), chr( ) - 순서 - 1. 아스키코드 설명 2. ord( ) 3. chr( ) 1. 아스키코드(ascii) 아스키는 미국 정보교환 표준 부호 (American Standard Code for Information Interchange)이다. 줄..

ooyoung.tistory.com

https://wikidocs.net/20792

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

'알고리즘' 카테고리의 다른 글

백준 - 5622번 / find(), index(), list comprehension  (0) 2021.08.02
백준 - 2908번 / python slicing  (0) 2021.08.02
백준 - 함수  (0) 2021.07.27
백준 - 1차원 배열  (0) 2021.07.26
백준 - while문  (0) 2021.07.20