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

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

남건욱 2023. 9. 22. 07:25
반응형
49. 숨어있는 숫자의 덧셈 (1)

문제

class Solution {
    public int solution(String my_string) {
        int answer = 0;
        
        for(int i=0; i<my_string.length(); i++){
            if(my_string.charAt(i) >= '0' && my_string.charAt(i) <= '9'){
                answer += my_string.charAt(i) - '0';
            }
        }
        
        return answer;
    }
}

<작성한 코드>

for문을 사용해서 배열의 길이만큼 반복시켜 줬다. 후 문자를 하나씩 비교하며 0~9의 숫자라면 answer에 더해주었다. -'0'을 해준 이유는 char형이라서 0은 48에 해당한다. int형으로 변환하려면 -48을 해서 처리하였다.

 

 

 

50. 소인수분해

문제

import java.util.*;

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

<작성한 코드>

정수를 담을 list를 먼저 선언해줬다. 그 뒤 소인수를 구하기 위해 for문으로 2부터 n까지 반복문을 만들었다. 만약 n을 i로 나눈 값이 0이면 i는 소인수일 것이다. 그리고 while문으로 i가 소인수일 때 n을 n/i로 초기화해주고 list에 추가했다.

값을 구해서 list가 초기화가 되었고 이것을 int형 answer배열에 넣어줘서 반환했다.

 

 

51. 컨트롤 제트

문제

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        int before = 0;
        String[] real = s.split(" ");
        
        for(String ss : real){
            if(ss.equals("Z")){
                answer -= before;
            }else {
                int num = Integer.parseInt(ss);
                answer += num;
                before = num;
            }
        }
        
        return answer;
    }
}

<작성한 코드>

우선 s안에 공백을 기준으로 정렬되어있으니 변수 real에 공백을 기준으로 내용들을 정리하였다. 그 뒤 for문으로 real에 있는 값들을 하나씩 뽑아서 비교했다. 현재 문자열이니 Integer.parseInt()를 사용해서 정수로 변환해 주고 answer에 더해줬다. before에 num을 넣어준 이유는 이전에 더한 값을 저장해 두고 문자열 Z가 나왔을 시 이전에 더한 값을 도로 빼주기 위해서 선언해 줬다. 

 

52. 배열 원소의 길이

문제

class Solution {
    public int[] solution(String[] strlist) {
        int[] answer = new int[strlist.length];
        
        for(int i=0; i<strlist.length; i++){
            answer[i] = strlist[i].length();
        }
        
        return answer;
    }
}

<작성한 코드>

strlist의 원소개수만큼 answer의 길이를 초기화 해줬다. 그리고 반복문으로 0부터 strlist길이까지 반복해 주고 answer [i]에 strlist [i]. length() 즉 각각의 길이를 대입해 줬다. 간단한 문제였다.

 

 

 

53. 직사각형 넓이 구하기

문제

class Solution {
    public int solution(int[][] dots) {
        int answer = 0;
        int w = 0;
        int h = 0;
        int x = dots[0][0];
        int y = dots[0][1];
        
        for(int i=1; i<dots.length; i++){
            if(x != dots[i][0]) w = Math.abs(x - dots[i][0]);
            if(y != dots[i][1]) h = Math.abs(y - dots[i][1]);
        }
        
        answer = w * h;
        
        return answer;
    }
}

<작성한 코드>

먼저 가로,세로의 값을 담을 변수 w, h를 선언해 줬다. 후에 x에 첫 번째 x좌표값을 넣고, y에도 첫 번째 y좌표값을 넣었다. 그 뒤 1부터 dots의 길이까지 반복을 시켰다. 만약 현재 x좌표와 dot [i][0] 번째 값이 다르다면 좌표의 차이를 구해줬다. 또한 Math.abs를 사용해서 절댓값을 구하도록 하였다. y도 마찬가지로 똑같이 해주었다. w*h를 해주고 반환하였다.

 

 

54. 캐릭터의 좌표

문제

class Solution {
    public int[] solution(String[] keyinput, int[] board) {
        int[] answer = new int[board.length];
        int x = 0;
        int y = 0;
        
        int x2 = board[0] / 2;
        int y2 = board[1] / 2;
        
        for(int i=0; i<keyinput.length; i++){
            if(keyinput[i].equals("left") && x > -x2) x--;
            if(keyinput[i].equals("right") && x < x2) x++;
            if(keyinput[i].equals("up") && y < y2) y++;
            if(keyinput[i].equals("down") && y > -y2) y--;
        }
        
        answer[0] = x;
        answer[1] = y;

        return answer;
    }
}

<작성한 코드>

x, y 좌표로 사용할 변수를 먼저 초기화했다. 후에 x, y가 갈수있는 최대의 길이를 담은 x2, y2변수를 만들어줬다. for문으로 keyinput 원소의 개수만큼 반복시켰고, 배열의 문자열이 각각 일치하고 x, y 가 설정된 최댓값, 최솟값을 넘지 않을 때만 x, y에 +, -를 해주었다.

 

 

55. 최댓값 만들기(2)

문제

import java.util.*;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        Arrays.sort(numbers);
        
        int length = numbers.length;
        int max = numbers[length-1] * numbers[length-2];
        int min = numbers[0] * numbers[1];
        
        answer = Math.max(max, min);
        
        return answer;
    }
}

<작성한 코드>

먼저 오름차순 정렬을 시켰다. 그뒤 length에 배열의 길이를 구한 뒤 제일 큰 수 두 개를 곱해서 max에 저장했다. 또한 음수끼리 곱하면 양수가 나올 수 있기 때문에 가장 작은 값도 곱해서 min에 저장했다. 그 뒤 Math.max를 사용해서 두 개 중 크기가 더 큰 값을 answer에 저장하고 반환했다.

반응형
프로필사진

남건욱's 공부기록