프로그래머스 문제풀이/알고리즘 (JAVA)

[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 1 (15~21번 문제풀이) / Level 0 (224/224)

남건욱 2023. 10. 25. 17:35
반응형
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 제곱을 대입해 주고 반환했다.

반응형
프로필사진

남건욱's 공부기록