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

[JAVA] 프로그래머스 알고리즘 문제풀이 - Level 0 (75~81번 문제풀이)

남건욱 2023. 9. 29. 19:52
반응형
75. 369게임

문제

public class Solution {
    public int solution(int order) {
        int answer = 0;
        
        String result = Integer.toString(order);
        
        for(int i=0; i<result.length(); i++){
            if(result.charAt(i) == '3' || result.charAt(i) == '6' || result.charAt(i) == '9') answer++;
        }
        
        return answer;
    }
}

<작성한 코드>

int형 order을 String형으로 변환해 줬다. 그 후 result의 길이만큼 반복하면서 문자열 하나하나를 비교했다. 만약 3, 6, 9 중 하나라도 같은 수가 나오면 answer를 ++ 해줘서 결과를 반환했다.

 

 

 

 

 

76. 암호 해독

문제

class Solution {
    public String solution(String cipher, int code) {
        String answer = "";
        
        for (int i=code-1; i<cipher.length(); i+=code) {
            answer += cipher.charAt(i);
        }
        
        return answer;
    }
}

<작성한 코드>

code번째 자리의 배수일때만 가져와야 하기 때문에 code-1부터 시작해서 cipher의 길이까지 반복해 줬다. 그 후 code만큼 더하면서 반복해 주고 그 자릿수에 있는 문자를 answer에 넣어주고 반환하였다. code-1을 해주는 이유는 배열은 [0]부터 시작하니 -1을 해줘서 자리를 맞춰줬다.

 

 

 

77. 대문자와 소문자

문제

class Solution {
    public String solution(String my_string) {
        String answer = "";
        
        for(int i=0; i<my_string.length(); i++){
            char ch = my_string.charAt(i);
            if(ch >= 'A' && ch <= 'Z') answer += (char)(ch + 32);
            else answer += (char)(ch - 32);
        }
        
        return answer;
    }
}

<작성한 코드>

for문으로 my_string의 길이만큼 반복해 줬다. 그리고 변수 ch에 각각의 문자를 넣어주고 범위를 비교하였다. 만약 A~Z 사이이면 answer에 ch+32를 해주고 char형으로 변경뒤 대입했다. my_string에는 소문자와 대문자만 있다고 했으니 else를 사용해서 A~Z가 아니면 ch-32를 해주고 대입해 준 뒤 결과를 반환하였다.

 

78. 영어가 싫어요

문제

class Solution {
    public long solution(String numbers) {
        String result ="";
        String answer ="";
        
        for(int i=0; i<numbers.length(); i++){
            result += numbers.charAt(i);
            if (result.equals("one")) {
                answer += "1";
                result = "";
            } else if (result.equals("two")) {
                answer += "2";
                result = "";
            } else if (result.equals("three")) {
                answer += "3";
                result = "";
            } else if (result.equals("four")) {
                answer += "4";
                result = "";
            } else if (result.equals("five")) {
                answer += "5";
                result = "";
            } else if (result.equals("six")) {
                answer += "6";
                result = "";
            } else if (result.equals("seven")) {
                answer += "7";
                result = "";
            } else if (result.equals("eight")) {
                answer += "8";
                result = "";
            } else if (result.equals("nine")) {
                answer += "9";
                result = "";
            } else if (result.equals("zero")){
                answer += "0";
                result = "";
            }
        }
        
        
        return Long.parseLong(answer);
    }
}

<작성한 코드>

문자를 하나씩 저장해서 같은문자가 나오면 숫자로 바꿔주고 result를 초기화해 주도록 하였다. 문제를 해결하고 더 효율적인 방법이 있지 않을까? 하고 찾아보다가 replace를 알게 되었다. 앞으론 replace를 사용해서 해결해 보도록 해야겠다.

 

79. 인덱스 바꾸기

문제

class Solution {
    public String solution(String my_string, int num1, int num2) {
        String answer = "";
        
        for(int i=0; i<my_string.length(); i++){
            if(i == num1) answer += my_string.charAt(num2);
            else if(i == num2) answer += my_string.charAt(num1);
            else answer += my_string.charAt(i);
        }
        
        return answer;
    }
}

<작성한 코드>

for문으로 my_string의 길이까지 반복해 주고 만약 i가 num1이랑 같으면 num2번째에 있는 값을 넣어주고 i가 num2랑 같으면 num1번째에 있는 값을 넣어줬다. 나머지 상황에서는 i번째 값을 그대로 넣어주고 반환하였다.

 

 

 

80. 한 번만 등장한 문자

문제

import java.util.*;

class Solution {
    public String solution(String s) {
        String answer = "";
        String[] result = s.split("");
        int cnt = 0;
        
        Arrays.sort(result);
        
        for(int i=0; i<result.length; i++){
            cnt = 0;
            for(int j=0; j<result.length; j++){
                if(result[i].equals(result[j])) cnt++;
            }
            if(cnt == 1) answer += result[i];
        }
        
        return answer;
    }
}

<작성한 코드>

result에 받아온 s를 잘라줬다. 그리고 오름차순으로 정렬 후 반복문을 만들어줬다. 내부 for문에서는 현재값과 다음값이 같은지 체크한다. 만약 같으면 cnt의 카운트가 올라간다. 만약 문자가 1번나왔으면 cnt는 1일 것이다. 그래서 1인값만 answer에 더해주고 반환했다. 간단한 문제였다.

 

 

81. 약수 구하기

문제

import java.util.*;

class Solution {
    public int[] solution(int n) {
        
        List<Integer> list = new ArrayList<>();
        int cnt = 0;
        
        for(int i=1; i<=n; i++){
            if(n%i == 0){
                list.add(i);
            }
        }
        
        int[] answer = new int[list.size()];
        
        for(int i=0; i<list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

<작성한 코드>

리스트 하나를 생성해 준 뒤에 for문으로 i가 n의 약수일 때 list에 추가해 줬다. 그 뒤 answer의 길이를 list의 길이만큼 생성해 주고 for문으로 그대로 대입해 주고 반환하였다.

반응형
프로필사진

남건욱's 공부기록