본문 바로가기
Algorithm 알고리즘/BAEKJOON 백준

[BAEKJOON][문자열1]-D-복호화(9046번)

by 개복치96 2022. 10. 23.
반응형

https://www.acmicpc.net/problem/9046

 

9046번: 복호화

입력의 T(1 ≤ T ≤ 20)는 테스트 케이스로, 입력 제일 상단에 주어진다. 각각의 테스트 케이스는 한 줄마다 소문자와 공백으로 이루어진 영어 문장이 주어진다. 이 문장의 길이는 적어도 1이상이

www.acmicpc.net

나는 이 문제에서는 테스트 케이스 한번에 한번 정답이 나오게끔 진행했다.

힌트는 딕셔너리를 이용하는 것이다.
딕셔너리를 이용하지 않은 분들이 계시다면 다시한번 해보시라!!

이 문제는 결국에 복호화가 필요 없이 그저 입력 받은 문자열에서 가장 많은 빈도로 사용된 문자를 확인하는 것이다.
나는 리스트로 문자를 받은 다음 그 문자의 빈도와 그 해당 문자를 딕셔너리로 저장했다.

1. 리스트를 이용하여 한 줄씩 문장을 입력받는다.
2. 입력 받은 문장을 공백을 제외하고 저장한다.
3. 딕셔너리를 사용하여 (해당문자:빈도수)를 저장한다.
4. 빈도수만 따로 리스트에 저장하고 최댓값을 갖는 빈도수를 찾는다.
5. 최대값의 빈도수를 갖는 '키'를 딕셔너리에서 찾는다.
6. 해당 딕셔너리에 '키'를 출력한다.

*여기에서 4번 최대 빈도수를 갖는 '키'가 두개 이상일 경우에 앞에 있는 키 값이 출력된다.
우리는 두개 이상일 경우에 ?를 출력하고 싶기 때문에 키값이 출력되어서는 안된다.
따라서 해당 최댓값이 두개 이상인 경우를 판별하는 조건문을 이용하여 예외처리를 해준다.

 

아래는 같이 스터디하는 친구가 작성한 코드이다.
확실히 간결하다...
좋은 코딩...

 

나와 다른점

❗️ord(문자) 사용 / ex) ord('a') -> 정수 '97' 반환
❗️chr(정수) 사용 / ex) chr(97) -> 문자 'a' 반환

1. 굳이 한 라인씩 받지 않고 그냥 input을 사용해서 쉽게 받은 것
2. 알파벳은 어차피 26자를 넘어가지 않으니, cnt리스트를 선언하고 26자의 0으로 초기화를 먼저 한것
3. ord(i) - ord('a')를 통해 문자 'a'에서 얼마나 떨어져 있는지를 확인하고 그 차를 이용한 리스트에 += 1로 더해줌

이렇게하면 딕셔너리를 사용하지 않고 count에 저장할수 있고,

해당 인덱스를 알면 chr를 사용해서 다시 문자로 만들 수 있다.

 

1차원 적으로 생각하지말고 조금 더 오래 고차원적으로 생각해서
코딩할 요소를 줄여보자!!!

 

https://github.com/Headfish96/Algorithm.git

 

GitHub - Headfish96/Algorithm: Algorithm That I study

Algorithm That I study. Contribute to Headfish96/Algorithm development by creating an account on GitHub.

github.com

 

반응형