15. 시저 암호
class Solution {
public String solution(String s, int n) {
String answer = "";
for(int i=0; i<s.length(); i++){
char ch = s.charAt(i);
if(ch == ' '){
answer += ch;
} else {
char ch2 = (char) (ch + n);
if (Character.isLowerCase(ch) && ch2 > 'z') {
ch2 = (char) (ch2 - 26);
} else if (Character.isUpperCase(ch) && ch2 > 'Z') {
ch2 = (char) (ch2 - 26);
}
answer += ch2;
}
}
return answer;
}
}
<작성한 코드>
for문을 사용해서 s의 길이만큼 돌려줬다. 그 뒤 char형 변수 ch에 s의 문자들을 하나씩 받아온다. 만약 ch가 공백이라면 answer에 그대로 더해줬고, 아니라면 ch2에 n만큼 더한 문자열을 저장한 뒤 if문으로 조건을 비교했다. if문에서는 ch는 소문자지만 변환된 ch2가 소문자의 마지막 z보다 큰 경우에는 -26을 해줘서 다시 소문자의 문자를 저장하도록 했다. 만약 대문자인 경우에는 Z보다 클경우에 -26을 해줬다. 그 뒤 answer에 추가하고 반환해 줬다.
16. 약수의 합
class Solution {
public int solution(int n) {
int answer = 0;
for(int i=1; i<=n; i++){
if(n%i == 0){
answer += i;
}
}
return answer;
}
}
<작성한 코드>
간단한 문제다. 약수들만 answer에 더해주고 반환하였다.
17. 이상한 문자 만들기
class Solution {
public String solution(String s) {
String answer = "";
String[] words = s.split("");
int cnt = 0;
for(int i=0; i<words.length; i++){
if(words[i].equals(" ")){
answer += words[i];
cnt = 0;
} else if(cnt %2 == 0){
answer += words[i].toUpperCase();
cnt ++;
} else if(cnt %2 != 0){
answer += words[i].toLowerCase();
cnt ++;
}
}
return answer;
}
}
<작성한 코드>
string 배열 words에 s를 배열형식으로 저장해 줬다. 그 뒤 for문을 사용해서 words의 길이만큼 반복해 준 뒤 if문으로 조건을 주었다. words [i]가 공백이라면 answer에 그대로 공백을 대입하고 cnt를 0으로 초기화시킨다. 만약 공백이 아니라면 cnt %2 ==0, cnt%2!= 0을 이용해서 각각 대문자, 소문자로 변환해 주고 cnt의 값을 1씩 올려줬다. 마지막으로 answer을 반환하면 끝난다.
18. 자릿수 더하기
import java.util.*;
public class Solution {
public int solution(int n) {
int answer = 0;
String result = String.valueOf(n);
for(int i=0; i<result.length(); i++){
int num = Integer.parseInt(String.valueOf(result.charAt(i)));
answer += num;
}
return answer;
}
}
<작성한 코드>
간단한 문제이다. n을 문자열로 변환시킨 뒤 각 문자열의 단어를 정수로 바꿔서 num에 저장한 후 answer에 추가해 줬다. 그 뒤 answer을 반환한다.
19. 자연수 뒤집어 배열로 만들기
class Solution {
public int[] solution(long n) {
String result = String.valueOf(n);
int[] answer = new int[result.length()];
for(int i=0; i<result.length(); i++){
int num = Integer.parseInt(String.valueOf(result.charAt(i)));
answer[answer.length - i - 1] = num;
}
return answer;
}
}
<작성한 코드>
간 long 형 변수 n을 문자열로 변경해 둔 뒤 for문을 통해서 result의 길이만큼 반복시켰다. 내부에서는 int형 변수 num에 각 자리의 숫자를 정수형으로 변경해서 대입했다. 그 뒤 answer의 길이에서 -i와 -1을 빼준 위치에 num을 대입해 줬다. 그 뒤 answer을 반환하였다.
20. 정수 내림차순으로 배치하기
import java.util.*;
class Solution {
public long solution(long n) {
long answer = 0;
String result = String.valueOf(n);
char ch[] = result.toCharArray();
Arrays.sort(ch);
String reverse = "";
for(int i=ch.length-1; i>=0; i--){
reverse += ch[i];
}
answer = Long.parseLong(reverse);
return answer;
}
}
<작성한 코드>
long형 변수 n을 문자열로 변환한 뒤 char형 배열의 형태로 저장해 줬다. 그 뒤 Arrays.sort를 사용해서 ch를 오름차순으로 정렬해 주고, 문자열 변수 reverse를 만들었다. 그 뒤 반복문을 통해 역순으로 reverse에 큰 값부터 넣어줬다. 그 뒤 Long.parseLong()을 사용해서 문자열을 Long형으로 변환해서 answer에 대입해주고 반환했다.
21. 정수 제곱근 판별
class Solution {
public long solution(long n) {
long answer = -1;
if(Math.sqrt(n) %1 == 0){
answer = (long)Math.pow(Math.sqrt(n) + 1, 2);
}
return answer;
}
}
<작성한 코드>
Math함수를 쓰면 간단하게 풀이가 가능하다. Math.sqrt(n)은 n의 제곱근을 반환한다. Math.pow(x, y)는 x의 y제곱을 반환한다. 따라서 풀이에서는 n의 제곱근을 1로 나눠서 정수인지 체크한다. 체크 후 정수라면 answer에 long형식으로 변환한 제곱근+1의 2 제곱을 대입해 주고 반환했다.
'프로그래머스 문제풀이 > 알고리즘 (JAVA)' 카테고리의 다른 글
남건욱's 공부기록