본문 바로가기

카테고리 없음

Programmers. 시저 암호

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

[기본 상태]

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        return answer;
    }
}

[풀이에 필요한 조건]

Character 형태의 숫자를 받아왔을 때, 결과값으로 리턴되는 ASCII 코드에 대해 알아야 함.

([참고]에 아스키 코드 테이블과 간단한 예시 작성)

 

입력받은 String 값을 Character 값으로 저장할 ArrayList chr 을 선언.

ArrayList<Character> chr = new ArrayList<>();

 

for 문에서 List chr 에 값을 저장.

chr.add(s.charAt(i));

 

Character 값을 계산해줄 Integer 형태의 tmp 선언.

int tmp=0;

 

입력 받은 값 중 " " (띄어쓰기, SP, 공백) 칸인 경우, 연산 없이 tmp=32 고정.

 

이 외 입력에 대해 조건부 연산을 진행.

 

64<tmp<91 로 시작하여, tmp>91이 되는 경우(대문자)와

97<tmp<122 로 시작하여, tmp>123이 되는 경우(소문자)가 별개로 존재.

 

조건 a 와 b를 동시에 만족해야 True가 되는 &&(AND) 를 사용하여 조건에 맞춰 연산 진행.

넘어가는 숫자에서 26을 빼주어, 알파벳이 매칭된 값으로 변경.

 

if ((int)chr.get(i)<123 && tmp > 122) {
tmp = (int) chr.get(i) + n - 26;
}
else if ((int)chr.get(i)<91 && tmp > 90) {
tmp = (int) chr.get(i) + n - 26;
}

 

연산이 완료된 값을 return 하기 전의 String 에 넣어주기 위해 chr_real에 Character형태의 tmp값을 저장.

chr_real.add((char) tmp);

 

chr_real의 size 만큼 반복하여 각 chr_real 값을 String answer에 하나씩 저장.

answer += chr_real.get(j);

 

[참고]

ASCII table

https://shaeod.tistory.com/228

[해답]

import java.util.*;

class Solution {
public String solution(String s, int n) {
String answer = "";

ArrayList<Character> chr = new ArrayList<>();

int tmp=0;

 

ArrayList<Character> chr_real = new ArrayList<>();


if (1<=n && n<=25) {
for (int i = 0; i < s.length(); i++) {
chr.add(s.charAt(i));

if ((int) chr.get(i) == 32) {
tmp = (int) chr.get(i);
}
else {
tmp = (int) chr.get(i) + n;

if ((int)chr.get(i)<123 && tmp > 122) {
tmp = (int) chr.get(i) + n - 26;
}
else if ((int)chr.get(i)<91 && tmp > 90) {
tmp = (int) chr.get(i) + n - 26;
}
}
chr_real.add((char) tmp);
}
}

for(int j=0;j<chr_real.size();j++){
answer += chr_real.get(j);
}
System.out.println(answer);

return answer;
}
}

더보기

import java.util.*;


class Solution {
public String solution(String s, int n) {
String answer = "";
int tmp=0;

ArrayList<Character> chr = new ArrayList<>();
ArrayList<Character> chr_real = new ArrayList<>();

if (1<=n && n<=25) {
for (int i = 0; i < s.length(); i++) {
System.out.print("넣을 값 =" + s.charAt(i));
chr.add(s.charAt(i));
System.out.println(" 입력된 값 =" + chr.get(i));

if ((int) chr.get(i) == 32) {
tmp = (int) chr.get(i);
}
else {
tmp = (int) chr.get(i) + n;

if ((int)chr.get(i)<123 && tmp > 122) {
tmp = (int) chr.get(i) + n - 26;
}
else if ((int)chr.get(i)<91 && tmp > 90) {
tmp = (int) chr.get(i) + n - 26;
}
}
System.out.println("tmp 확인 : " + tmp);
chr_real.add((char) tmp);
System.out.println("chr_real 확인 : " + chr_real);
}
}

for(int j=0;j<chr_real.size();j++){
System.out.println("값확인 : " + chr_real.get(j));
answer += chr_real.get(j);
}
System.out.println(answer);

return answer;
}
}

public class Main {
public static void main(String[] args) {
Solution sol = new Solution();

String s = "a B z";
int n = 4;

String result = sol.solution(s,n);

System.out.println("결과값 : " + result);


}
}