본문 바로가기
공부/algorithm

[programmers] 시저 암호

by 밍미 2018. 5. 22.
시저 암호

시저 암호

 

 

처음에는 보고 뭐야 그냥 밀면 되잖아? 쉽네 했던 내 자신을 반성합니다....

a부터 z까지 알파벳이 돌아가는데, z를 넘기면 다시 a로 돌아가야한다. 뭐 여기까지는 여러 처리방법도 있고 쉽다. 그런데 소문자 대문자 모두 처리해주어야했다.

우선은 단순하게 생각해서 'z'를 넘으면 'a'로 돌아가고 'Z'를 넘기면 'A'로 돌아가고 아니면 1 증가시켜 다음 문자로 넘어가게 해주는 식으로 처리했다.

 

 

 

이렇게 해주어도 충분히 원하는 값을 구할 수 있다.

하지만 다음과 같은 방식으로 처리해준다면 어떨까?

이중 for문을 사용해 1 더할 때마다 z를 넘는지 확인하는 것이 아니라 알파벳이 26자임을 이용해서 for문 하나만으로도 원하는 문자를 구할 수 있도록 했다.

대문자일 경우 'A'를 뺀 값에 n을 더해주고 26으로 나눈 나머지를 구해 다시 'A'에 더해주었고, 소문자일 경우 'a'를 이용해서 같은 방식으로 구했다.

 

 

 

첫번째 방법에서 두번째 방법으로 바꾸어줌으로써 for문이 하나 줄어들어 시간복잡도가 O(N^2)에서 O(N)으로 줄어들게 되었다.

하지만 나는 첫번째 방법도 효율성을 따지자면 비효율적이지만 알파벳이 26자니까 26으로 나눈 나머지를 더해주면 n이 얼마나 크더라도 몇바퀴 도는지 상관 없이 필요한만큼 문자가 이동하겠다라는 점을 파악할 필요 없이 직관적으로 의도를 파악할 수 있다고 생각해서 두 방법 모두 나쁘지 않다고 본다.


'공부 > algorithm' 카테고리의 다른 글

[programmers] 야근 지수  (0) 2018.05.22
[programmers] 다음 큰 숫자  (0) 2018.05.22
[programmers] 소수 찾기  (0) 2018.05.22
[programmers] 하샤드수  (0) 2018.05.22
[programmers] 최솟값 만들기  (0) 2018.05.22

댓글