728x90
반응형
SMALL

문제 설명

연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.


제한사항

  • 1 ≤ num ≤ 100
  • 0 ≤ total ≤ 1000
  • num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.

입출력 예

num total result

3 12 [3, 4, 5]
5 15 [1, 2, 3, 4, 5]
4 14 [2, 3, 4, 5]
5 5 [-1, 0, 1, 2, 3]

입출력 예 설명

입출력 예 #1

  • num = 3, total = 12인 경우 [3, 4, 5]를 return합니다.

입출력 예 #2

  • num = 5, total = 15인 경우 [1, 2, 3, 4, 5]를 return합니다.

입출력 예 #3

  • 4개의 연속된 수를 더해 14가 되는 경우는 2, 3, 4, 5입니다.

정수 배열의 오름 차순 Arrays.sort()

정수 = 음수도 포함

total 값이 0일 경우 → {-2, -1, 0, 1, 2}

total이 0인 경우 반복문 필요

for (int i = (total + num); i <= (total + num); i++){
}

오류 1 : int answer = {}; → {} 안의 값을 안넣음

오류 2 : 실행한 결괏값 [15,16,17]이 기댓값 [3,4,5]과 다릅니다. → -(total + num); ‘-’ 안붙여서 생김

package Lv0;

public class H120923 {
    public static int[] solution(int num, int total) {
        int[] answer = new int[num];
        for (int i = -(total + num); i <= (total + num); i++) {
            int sum = 0;
            int index = 0;
            answer = new int[num];
            for (int j = i; j < (i + num); j++) {
                sum += j;
                answer[index++] = j;
            }
            if (sum == total) {
                break;
            }
        }
        return answer;
    }
    public static void main(String[] args){
        int num = 3;
        int total = 12;
    }
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

7의 개수  (0) 2023.03.13
저주의 숫자 3  (0) 2023.03.12
직사각형 넓이 구하기  (0) 2023.03.10
숫자 찾기  (0) 2023.02.26
문자열 정렬하기(2)  (0) 2023.02.25
728x90
반응형
SMALL

문제 설명

2차원 좌표 평면에 변이 축과 평행한 직사각형이 있습니다. 직사각형 네 꼭짓점의 좌표 [[x1, y1], [x2, y2], [x3, y3], [x4, y4]]가 담겨있는 배열 dots가 매개변수로 주어질 때, 직사각형의 넓이를 return 하도록 solution 함수를 완성해보세요.


제한사항

  • dots의 길이 = 4
  • dots의 원소의 길이 = 2
  • 256 < dots[i]의 원소 < 256
  • 잘못된 입력은 주어지지 않습니다.

입출력 예

dots result

[[1, 1], [2, 1], [2, 2], [1, 2]] 1
[[-1, -1], [1, 1], [1, -1], [-1, 1]] 4

입출력 예 설명

입출력 예 #1

  • 좌표 [[1, 1], [2, 1], [2, 2], [1, 2]] 를 꼭짓점으로 갖는 직사각형의 가로, 세로 길이는 각각 1, 1이므로 직사각형의 넓이는 1 x 1 = 1입니다.

입출력 예 #2

  • 좌표 [[-1, -1], [1, 1], [1, -1], [-1, 1]]를 꼭짓점으로 갖는 직사각형의 가로, 세로 길이는 각각 2, 2이므로 직사각형의 넓이는 2 x 2 = 4입니다.

https://school.programmers.co.kr/learn/courses/30/lessons/120860


직사각형을 구성하는 점 → {x좌표, y좌표} 으로 표현됨

x * y

x의 길이와 y의 길이를 구해야하는데 각 변의 길이는 각 좌표의 큰값에서 가장 작은 값을 빼서 구하기 → 1차 시도

Math.*abs = 주어진 숫자에 절대값 반환 → 직사각형의 넓이에 음수가 들어가면 안되기 때문에 사용*

if(x != dots[i][0]) = Math.abs(x - dots[i][0]); 
                     ^
return answer;

에러 발생 : 절대값을 구하는 메서드 앞에 임의의 값 선언 필요!

return answer; → answer을 선언하지 않아 쓸 수 없음

  • x, y 임의의 값이 두개가 필요할거 같음
if(x != dots[i][0]) = Math.abs(x - dots[i][0]); 
                     ^

x * a 를 넣어주기 않았기 때문…ㅠ

int x = dots[0][0]; => dots[i][0]
int y = dots[0][1]; => dots[i][1]

테스트는 성공했는데, 제출 때 실패…!

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

최대값 최소값으로 구해보기

x중에서 가장 큰값 - x중에서 가장 작은 값 * y중에서 가장 큰값 - y중에서 가장 작은 값

x중에서 가장 큰값 - x중에서 가장 작은 값 => x의 길이

y중에서 가장 큰값 - y중에서 가장 작은 값 => y의 길이

class Solution {
    public int solution(int[][] dots) {
        int a = 0;
        int b = 0;
        for(int i = 1; i< dots.length; i++) {
            int x = Math.max(sizes[i][0], size[i][1]);
            int y = Math.min(sizes[i][0], size[i][1]);
        }
        a = Math.max(a, x);
        b = Math.min(b, y);
        
        return a * b;
    }
}

정답

class Solution {
    public int solution(int[][] dots) {
        int minX = 256;
        int minY = 256;
        int maxX = -256;
        int maxY = -256;

        for(int i = 0; i < dots.length; i++){
            if(dots[i][0] < minX){
                minX = dots[i][0];
            }
            if(dots[i][1] < minY){
                minY = dots[i][1];
            }
        }

        for(int i = 0; i < dots.length; i++){
            if(dots[i][0] > minX){
                maxX = dots[i][0];
            }
            if(dots[i][1] > minY){
                maxY = dots[i][1];
            }
        }

        return (maxX - minX) * (maxY - minY);

    }
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

저주의 숫자 3  (0) 2023.03.12
연속된 수의 합  (0) 2023.03.11
숫자 찾기  (0) 2023.02.26
문자열 정렬하기(2)  (0) 2023.02.25
OX퀴즈  (0) 2023.02.23
728x90
반응형
SMALL

제한사항

  • 0 < num < 1,000,000
  • 0 ≤ k < 10
  • num에 k가 여러 개 있으면 가장 처음 나타나는 자리를 return 합니다.

입출력 예

num k result

29183 1 3
232443 4 4
123456 7 -1

입출력 예 설명

입출력 예 #1

  • 29183에서 1은 3번째에 있습니다.

입출력 예 #2

  • 232443에서 4는 4번째에 처음 등장합니다.

입출력 예 #3

  • 123456에 7은 없으므로 -1을 return 합니다.
package Lv0;

public class H120904 {
    public static int solution(int num, int k) {
        for(int i=0;i<(num+"").length();i++){
            if((num+"").charAt(i)==(char)(k+48)) return i+1;
        }
        return -1;
    }
    public static void main(String[] args){
        int num = 29183;
        int k = 1;
        System.out.println(solution(num, k));
    }
}
728x90
반응형
LIST

'알고리즘 > 프로그래머스 JAVA LV.0' 카테고리의 다른 글

연속된 수의 합  (0) 2023.03.11
직사각형 넓이 구하기  (0) 2023.03.10
문자열 정렬하기(2)  (0) 2023.02.25
OX퀴즈  (0) 2023.02.23
문자열 계산하기  (0) 2023.02.22

+ Recent posts