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

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

남건욱 2023. 10. 18. 17:51
반응형
170. 가까운 1 찾기

문제

class Solution {
    public int solution(int[] arr, int idx) {
        int answer = -1;
        
        for(int i=idx; i<arr.length; i++){
            if(arr[i] == 1){
                answer = i;
                break;
            }
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제다. i는 idx부터 arr의 길이까지 반복시켜 줬고 arr [i]가 1이면 answer에 i값을 넣어줬다. 그 후 answer을 반환시켜 주고 종료했다.

 

 

 

171. 카운트 다운

문제

class Solution {
    public int[] solution(int start, int end_num) {
        int[] answer = new int[start - end_num + 1];
        int idx = 0;
        
        for(int i=start; i>=end_num; i--){
            answer[idx++] = start--;
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제다. answer의 0번째부터 start값부터 1씩 뺀 값을 차례로 넣어주고 반환하면 된다.

 

 

 

172. 글자 지우기

문제

class Solution {
    public String solution(String my_string, int[] indices) {
        String answer = "";
        StringBuilder my_string2 = new StringBuilder(my_string);

        for (int i : indices) {
            my_string2.setCharAt(i, ' ');
        }

        answer = my_string2.toString().replaceAll(" ", "");
        return answer;
    }
}

<작성한 코드>

StringBuilder 변수하나를 만들어줬다. 그 뒤 foreach문을 사용해서 i번째에 있는 문자를 공백문자로 변경시켰다. 그 뒤 my_string2를 배열형식으로 변환한 뒤 replaceAll을 사용해서 공백을 지워주고 반환하였다.

 

 

 

173. 배열 만들기 1

문제

class Solution {
    public int[] solution(int n, int k) {
        int[] answer = new int[n/k];
        int cnt = 0;
        
        for(int i=1; i<=n; i++){
            if(i%k == 0) answer[cnt++] = i;
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제다. i를 k로 나눠서 나머지가 0이되면 answer에 추가했다. 그리고 반환해 주면 된다.

 

 

 

174. 문자 개수 세기

문제

class Solution {
    public int[] solution(String my_string) {
        int[] answer = new int[52];
        
        for(char ch : my_string.toCharArray()){
            if(ch >= 'A' && ch <= 'Z'){
                answer[ch - 'A']++;
            } else{
                answer[ch - 'a' + 26]++;
            }
        }
        
        return answer;
    }
}

<작성한 코드>

배열의 길이는 52개이므로 먼저 answer를 선언해줬다. 그 뒤 foreach문으로 문자열 my_string을 문자형으로 바꿔주고 하나씩 대입해 준다. ch가 대문자이면 answer [문자 - 'A']를 해준 포인트에 +1을 해주고 소문자라면 answer [ch - 'a'를 해준 뒤 소문자는 26번째 인덱스부터 시작하니 +26을 해주고 그 부분에 1을 증가시켰다. 그 뒤 answer을 반환하였다.

 

 

 

175. qr code

문제

class Solution {
    public String solution(int q, int r, String code) {
        String answer = "";
        
        for(int i=0; i<code.length(); i++){
            if(i%q == r) answer += code.charAt(i);
        }
        
        return answer;
    }
}

<작성한 코드>

간단한 문제다. 반복문으로 모든원소를 비교하고 if문으로 i를 q로 나눴을 때 나머지가 r일 때만 answer에 더해줬다. 그 뒤 반환해 줬다.

 

 

 

176. 세로 읽기

문제

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

<작성한 코드>

인덱스는 0부터 시작하니 시작점을 c-1로 지정해 줬다. my_string의 길이까지 반복해 주었고 i의 증가량은 m만큼 증가해 줬다. 그 뒤 answer을 반환해 줬다.

 

 

177. 문자열 뒤집기

문제

 

class Solution {
    public String solution(String my_string, int s, int e) {
        String answer ="";
        char[] ch = my_string.toCharArray();
        
        while(s < e){
            char temp = ch[s];
            ch[s] = ch[e];
            ch[e] = temp;
            s++;
            e--;
        }
        
        for(int i=0; i<ch.length; i++){
            answer += ch[i];
        }
        
        return answer;
    }
}

<작성한 코드>

ch에 my_string을 문자형으로 변환해서 넣어줬다. 그 후 while문으로 s와 e의 값을 변경해 주고 s는 1씩 증가, e는 1씩 감소시켜 줬다. 그 뒤 ch의 값을 answer에 넣고 반환해 주었다.

반응형
프로필사진

남건욱's 공부기록