작지만 꾸준한 반복

[python] 파이썬 아스키코드(ASCII) | 이코테 왕실의 나이트 본문

공부기록/TIL

[python] 파이썬 아스키코드(ASCII) | 이코테 왕실의 나이트

iamjooon2 2022. 7. 24. 04:37

요즘 나동빈님의 이것이 취업을 위한 코딩테스트다 책을 보고있다.

방학을 맞아 하고있는 UMC 앱런칭 프로젝트가 내 메인이긴 하지만,

알고리즘 관련 문제는 못해도 하루에 하나씩은 꾸준히 풀자는 나와의 약속과

취업을 준비하며, 코딩테스트를 통과하기 위한 최소한의 실력을 위해 꾸준히 보고있다.

그 중 왕실의 나이트라는 문제를 푸는 중, 2차원 배열을 그린 후 나의 좌표를 행은 숫자, 열은 알파벳으로 입력받는 구간이 있었다

xy=input() # ex) a1
row = int(xy[1])
col = int(ord(xy[0])) - int(ord('a')) + 1

띠용? 아스키코드?

 

예전 C++ 수업때 처음 ASCII코드를 다루는 코드를 접했을때 많이 헤맸던 기억이 있다.

// ... 
while (true){
	cin >> input;
    	int id = input - '0';
// ...

대충 이런 느낌의 코드였는데, 기본기가 많이 부족했던 나는 저 코드가 대체 뭘까 구글과 데이트했다

모르면 배우면 되고, 실수는 다음부터 하지 않으면 된다.

그래서 파이썬에서 아스키코드 다루는 방법을 정리해둔다.

미래의 나야 잊지마.

 

 

아스키코드표에서 A는 65, a는 97이다

ord()

하나의 문자를 인자로 받고, 해당 문자에 해당하는 유니코드 정수를 리턴한다

chr()

하나의 정수를 인자로 받고, 해당 정수에 해당하는 유니코드 문자를 리턴한다

 

ord('A') # 65
ord('a') # 97

chr(65) # A
chr(97) # a

 

그리고 처음 코드를 다시 보자

string_val = 'a'
int(ord(string_val)) - int(ord('a')) + 1

먼저 'a'가 들어가있는 string_val의 아스키코드값을 가져온다 (이 경우에 ord() 함수의 리턴은 97이 될 것이다)

그리고 깔끔하게 int() 로 확실히 숫자로 처리 해준 다음, 아스키코드의 시작값인 int(ord('a'))를 빼준다 (알파벳에 따른 숫자로 치환하기 위한 과정이다)

문제에서 행의 경우 첫번째 칸은 소문자 a, 두번째 칸은 소문자 b ... 의 방식으로 소문자 알파벳으로 입력받았다.

결국 a가 1로 대치되므로 이를 맞추기 위해 1을 더해주며 끝!

 

마무리 어떻게 하지? 아무튼 그렇다