songdev
songdev
songdev
전체 방문자
오늘
어제
  • 분류 전체보기 (78)
    • Web 개발 (6)
    • 리눅스 (5)
    • git (5)
    • Bigdata (8)
      • 하둡 Architecture 번역 (6)
      • Ambari (2)
    • 코테 (22)
      • 프로그래머스 (22)
    • 자격증 (7)
      • 정보처리기사 (5)
      • SQLD (2)
    • 스터디 (18)
      • 웹 프로그래밍 (3)
      • 개념정리 (4)
      • 예제 (6)
      • 바닐라 JS로 크롬 앱 만들기 (5)
    • 일상 (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정보처리기사
  • 프로그래머스
  • parseInt()
  • copyOfRange()
  • javascript
  • 자바스크립트
  • github push
  • 배열의 복사
  • 리눅스
  • 정보처리기사 필기
  • 배열
  • sort()
  • 정렬
  • Java
  • SQLD
  • 깃허브
  • charAt()
  • github
  • level1
  • 향상된 버블정렬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
songdev

songdev

시저 암호/java/프로그래머스/Level1
코테/프로그래머스

시저 암호/java/프로그래머스/Level1

2020. 2. 16. 14:19
반응형

https://programmers.co.kr/learn/courses/30/lessons/12926

 

코딩테스트 연습 - 시저 암호 | 프로그래머스

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요. 제한 조건 공백은 아무리 밀어도 공백입니다. s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다. s의 길이는 8000이하입니다.

programmers.co.kr

<시저 암호>

 

○ 처음 시도한 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
  public String solution(String s, int n) {
      String answer = "";
      
      for(int i=0;i<s.length();i++) {
            
            if((char)(s.charAt(i)+n) > 'Z' && (char)(s.charAt(i)+n) < 'a'
            ||(char)(s.charAt(i) +n) > 'z') {
                answer += (char)(s.charAt(i) + -26 +n);
            }else if(s.charAt(i)==' ') {
                answer += " ";
            }else
                answer += (char)(s.charAt(i) + n);
                
        }
      
      return answer;
  }
}
Colored by Color Scripter
cs

[시행착오]

- 문자열 i번지 각각의 아스키코드에 n만큼을 더해준다.

- z또는 Z를 넘어갈때 26을 빼주고 다시 n만큼을 더해준다.

- 문자열의 i번지를 char형태의 배열로 담아 처리해야한다고 생각했다. 

  charAt() 메소드의 사용이 next().charAt()에서만 쓸 수 있다고 생각했다.

  s도 String 배열이기 때문에 점연산자로 s.charAt()으로 접근할 수 있다.

- 대문자와 소문자를 나누지 않아서 Y를 4만큼 증가시킬때 같은 경우 특수문자가 출력됐다.

- 공백 처리를 아스키코드로만 처리해야한다고 생각하였다.

  " "를 += 연산자로 더해주면 문자열 그대로 더해져서 출력된다.

 

 

○ 다시 수정한 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
  public String solution(String s, int n) {
      String answer = "";
          // s의 길이만큼 반복하여 체크하기
        for(int i=0;i<s.length();i++) {
        // i번지 알파벳이 대문자일 경우
        if(s.charAt(i)>='A' && s.charAt(i)<='Z') {
            // n을 더한 값이 Z를 넘어갈 경우
            if((char)(s.charAt(i)+n)>'Z') 
                answer += (char)(s.charAt(i)+n-26);    // n을 더하고 26을 빼준다
            else
                answer += (char)(s.charAt(i)+n);    // n만 더해준다
        // i번지 알파벳이 소문자일 경우
        }else if(s.charAt(i)>='a' && s.charAt(i)<='z') {
            // n을 더한 값이 z를 넘어갈 경우
            if((char)(s.charAt(i)+n)>'z')
                answer += (char)(s.charAt(i)+n-26);    // n을 더하고 26을 빼준다
            else 
                answer += (char)(s.charAt(i)+n);    // n만 더해준다
        // i번지가 공백일 경우
        }else if(s.charAt(i)==' ') 
            answer += " ";    // 공백을 String으로 더해주면 그대로 
    }
      return answer;
  }
}
Colored by Color Scripter
cs

- 대문자의 범위와 소문자의 범위를 나누어 구분하였다.

- 대문자와 소문자 if문 안에 z또는 Z를 벗어날 경우를 else문으로 처리하였다.

- 구멍없이 원하는 결과값은 나왔지만 if문이 7개로.. 너무 많다.

 

○ 좋아요를 많이 받은 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Caesar {
    String caesar(String s, int n) {
        String result = "";
    n = n % 26;
    for (int i = 0; i < s.length(); i++) {
      char ch = s.charAt(i);
      if (Character.isLowerCase(ch)) {
        ch = (char) ((ch - 'a' + n) % 26 + 'a');
      } else if (Character.isUpperCase(ch)) {
        ch = (char) ((ch - 'A' + n) % 26 + 'A');
      }
      result += ch;
    }
      return result;
    }
}
Colored by Color Scripter
cs

- Character.isLowerCase() : 소문자를 구분하는 메소드

  Character.isUpperCase() : 대문자를 구분하는 메소드

- % 연산자를 사용하여 밀어줄 수를 구하는 방법

반응형

'코테 > 프로그래머스' 카테고리의 다른 글

문자열 내림차순으로 배치하기/java/프로그래머스/Level1  (0) 2020.02.23
K번째수/java/프로그래머스/Level1  (0) 2020.02.16
약수의 합/java/프로그래머스/Level1  (0) 2020.02.15
2016년/java/프로그래머스/Level1  (0) 2020.02.15
소수 찾기/java/프로그래머스/Level1  (0) 2020.02.15
    '코테/프로그래머스' 카테고리의 다른 글
    • 문자열 내림차순으로 배치하기/java/프로그래머스/Level1
    • K번째수/java/프로그래머스/Level1
    • 약수의 합/java/프로그래머스/Level1
    • 2016년/java/프로그래머스/Level1
    songdev
    songdev

    티스토리툴바