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);
}
}