시저 암호

최진훈·2022년 1월 26일
0

programmers

목록 보기
22/73
post-thumbnail

생각나는 방법은 두가지 정도이다.

  1. 소문자, 대문자가 들어간 배열을 만들고 인덱스로 답찾기.
  2. 아스키 코드로 숫자 연산해서 답찾기.

일단 둘다 해봐야겠다..
첫번째 방법은 인덱스를 사용하려고 형변환도 많이 해야하고 굳이 배열두개도 만들어줘야 하기때문에 별로인 것 같다. 두번째 방법으로 찾아봐야겠다. 일단 아스키 코드표를 찾고..

source : https://shaeod.tistory.com/228

일단 떠오르는 순서는 이렇다.

  1. 입력받은 sString형태이기 때문에 chunked()함수를 사용하여 나눈다.
  2. 아스키 코드값에 따라서 범위를 나눈다.
    2-1 . 대문자와 소문자사이
    2-2 . 소문자 이상
  3. chunked()로 나눈 숫자들을 toInt()로 캐스팅한 다음
  4. 2-1,2에 해당하는 숫자들은 -26을 해줘서 A,a로 돌아오도록 한다.
  5. 마지막으로 toString()으로 캐스팅한 뒤 answer에 더해준다.

레고레고

이대로 코드를 짜봤더니 마지막 toString()해줬을때 숫자그대로 문자가 되서 출력된다. 생각을 잘못했다. String이 아니라 Char형태로 코드를 짰어야 아스키 코드에 해당하는 숫자를 문자로 바꿨을때 문자로 제대로 출력이 되는것이었다. chunked()함수를 쓸 필요도 없고 toCharArray()를 이용해서 인덱스에 따라 연산하면 되는 것 이었다.
그리고 추가로 공백일때의 처리를 안해줘서 s.toCharArray()[i]' '일때는 answer' ' 를 그대로 더해주는 식으로 해결했다.

테스트를 해보자~~


대참사 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
이럴때가 제일 당황스럽다. 어디가 잘못된 것인지 찾기가 너무 힘들다. 질문하기에 들어가서 사람들의 경우를 좀 살펴야겠다...

문제를 찾았다!! 입력받은 문자가 대문자인데(65 < ASCII < 90) n을 더해줬을때 소문자 영역 (97 < ASCII < 122)로 들어가는 경우가 문제였다. 따로 예외로 만들어주니 해결되었다!!

profile
레고레고

0개의 댓글