티스토리 뷰

programmers.co.kr/learn/courses/30/lessons/42860

 

문제는 이렇다. 조이스틱으로 이름을 넣을때 최소한의 입력만으로 넣고싶다.

마치 오락실에서 게임끝나고 랭킹에 이름넣는것과 비슷하다. 

유의사항)

문자열 "A"가 기본 베이스로 깔려있어서 입력하고 남은 문자열이 모두 A라면 더이상 입력하지 않아도 된다.

알파벳을 역순으로 입력할 수 있다.

 

문자열은 대문자로만 입력가능하다는 것에서 아스키코드를 활용하면 되겠다고 아이디어가 떠올랐다.

lsjsj92.tistory.com/201

 

파이썬 문자를 아스키로, 아스키 코드를 문자로

파이썬에서 문자를 아스키 코드로, 아스키 코드를 문자로 변경하는 것은 매우 간단합니다 ord(문자) : 아스키 코드를 반환해준다 chr(숫자) : 숫자에 맞는 아스키 코드를 반환한다 위처럼 진행하면

lsjsj92.tistory.com

아스키코드 파이썬 을 검색해서 정보를 얻었다. 받은 문자열을 ord('문자열')을 하면 int형으로 아스키 코드가 반환된다.

그리고 A는 65로 시작해 Z 90으로 끝난다는것을 이용했다.

 

코드 순서대로 설명하자면, 오른쪽으로 가는 리스트와 왼쪽으로 가는 리스트를 만들었다.

둘 중 더 빠르게 입력완료하는 것을 정답으로 return 하기 위해서다.

 

알파벳을 완성하기 위해서 몇번 움직여야 하는지는 for문으로 만들었다.

입력받은 알파벳의 아스키코드 - 65(A의 아스키코드) 를 해주면 얼만큼 조이스틱을 움직여야 하는지 나온다.

예를 들어 알파벳 D의 아스키코드는 68이고 여기서 65를 빼면 3이된다.

A->B->C->D 이렇게 3번 입력하면 D가 나오는것과 일치한다.

알파벳의 총 갯수는 26개이므로 13번이 넘는 입력이 들어오면 역순으로 입력하는것이 더 빠르다.

이 경우는 그냥 91 - 아스키코드 로 해결했다. 90이 Z이므로 임의로 91을 주었다.

A에서 X로 역순으로 간다고 생각하면 X의 아스키 코드가 88이므로 91 - 88 = 3 이 나온다.

A->X->Y->Z 역순으로 3번 입력하여 나오는 것과 일치한다.

 

만약 남은 문자열들이 모두 A라면 더이상 입력할 필요가 없어서 그것을 확인하면 break 해주는 코드도 넣어주었다.

왼쪽으로 가는 리스트는 동일한 코드에 왼쪽리스트만 넣어주면 됐다.

이 부분은 중복배제의 법칙에 의해서 깔끔하게 수정해 주어야 하는 부분이라고 생각된다.

 

최종적으로 이 두개의 정답을 비교하여 낮은 숫자를 return해서 완성했다고 생각했으나..

 

통과한 케이스에서 걸린시간이 매우 낮게나와서 마음에 들었지만 마지막 케이스에서 결국 실패하고 말았다 ㅠㅠ.

이 부분은 코드를 짜면서 계속 떠올랐던 부분인데, 오른쪽 혹은 왼쪽으로 가다가 다시 반대로 돌아가는게 더욱 빠른 경우가 case 11인거 같았다.

다시 수정해서 완성시켜야겠다.