아스키코드
컴퓨터는 문자를 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
|
c = input()
print(ord(c))
n = int(input())
print(chr(n))
|
cs |
문제에서는 아스키코드 값을 물어보는 경우도 있고, 아스키코드를 이용해서 문제를 해결하는 경우도 있다.
아스키코드를 활용해서 문제를 해결하는 경우
백준 10809번: 알파벳 찾기 - https://www.acmicpc.net/problem/10809
내가 작성한 코드
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
'알고리즘' 카테고리의 다른 글
백준 - 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 |