728x90
반응형
SMALL

문제 설명

정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.


제한사항

  • numbers의 길이는 2 이상 100 이하입니다.
    • numbers의 모든 수는 0 이상 100 이하입니다.

입출력 예

numbers result

[2,1,3,4,1] [2,3,4,5,6,7]
[5,0,2,7] [2,5,7,9,12]

입출력 예 설명

입출력 예 #1

  • 2 = 1 + 1 입니다. (1이 numbers에 두 개 있습니다.)
  • 3 = 2 + 1 입니다.
  • 4 = 1 + 3 입니다.
  • 5 = 1 + 4 = 2 + 3 입니다.
  • 6 = 2 + 4 입니다.
  • 7 = 3 + 4 입니다.
  • 따라서 [2,3,4,5,6,7] 을 return 해야 합니다.

입출력 예 #2

  • 2 = 0 + 2 입니다.
  • 5 = 5 + 0 입니다.
  • 7 = 0 + 7 = 5 + 2 입니다.
  • 9 = 2 + 7 입니다.
  • 12 = 5 + 7 입니다.
  • 따라서 [2,5,7,9,12] 를 return 해야 합니다.
package LV1;

import java.util.*;

public class H68644 {
    public static ArrayList<Integer> solution(int[] numbers) {  //정답을 담을 ArrayList 생성

            HashSet<Integer>set= new HashSet<>();   //중복값을 지워줄 HashSet 생성

            for(int i=0;i<numbers.length-1;i++) {
                for(int j=i+1;j<numbers.length;j++) set.add(numbers[i]+numbers[j]);  //HashSet에 두 수의 합을 저장
            }

            ArrayList<Integer>list=new ArrayList<>(set);  //Set은 순서가 없기때문에 ArrayList로 변환
            list.sort(null);  // collrection.sort가 아닌 ArrayList의 sort를 사용

            return list;
        }

    public static void main(String[] args) {
        int[] numbers = new int[]{2,1,3,4,1};
        System.out.println(Arrays.toString(new ArrayList[]{solution(numbers)}));
    }
}
// a, b, c, d가 있으면 각각 더해서 값을 도출하고 오름차순으로 정렬한다.

TreeSet in Java - javatpoint

Java TreeSet 클래스는 저장을 위해 트리를 사용하는 Set 인터페이스를 구현합니다. AbstractSet 클래스를 상속하고 NavigableSet 인터페이스를 구현합니다. TreeSet 클래스의 개체는 오름차순으로 저장됩니다.

Java TreeSet 클래스에 대한 중요한 사항은 다음과 같습니다.

  • Java TreeSet 클래스에는 HashSet과 같은 고유한 요소만 포함되어 있습니다.
  • Java TreeSet 클래스 액세스 및 검색 시간이 조용하고 빠릅니다.
  • Java TreeSet 클래스는 null 요소를 허용하지 않습니다.
  • Java TreeSet 클래스가 동기화되지 않았습니다.
  • Java TreeSet 클래스는 오름차순을 유지합니다.
  • Java TreeSet 클래스에는 HashSet과 같은 고유한 요소만 포함되어 있습니다.
  • Java TreeSet 클래스 액세스 및 검색 시간은 매우 빠릅니다.
  • Java TreeSet 클래스는 null 요소를 허용하지 않습니다.
  • Java TreeSet 클래스가 동기화되지 않았습니다.
  • Java TreeSet 클래스는 오름차순을 유지합니다.
  • TreeSet은 비교할 수 있는 일반 유형만 허용할 수 있습니다. 예를 들어 Comparable 인터페이스는 StringBuffer 클래스에 의해 구현됩니다.

TreeSet 클래스의 내부 작업

TreeSet은 Red-Black Tree처럼 자체 균형을 이루는 이진 검색 트리를 사용하여 구현되고 있습니다. 따라서 검색, 제거 및 추가와 같은 작업은 O(log(N)) 시간을 소비합니다. 그 이유는 자체 균형 트리에 있습니다. 언급된 모든 작업에 대해 트리 높이가 O(log(N))를 초과하지 않도록 하기 위해 존재합니다. 따라서 정렬된 큰 데이터를 유지하고 작업을 수행하기 위한 효율적인 데이터 구조 중 하나입니다.

TreeSet 클래스의 동기화

위에서 이미 언급했듯이 TreeSet 클래스는 동기화되지 않습니다. 둘 이상의 스레드가 트리 집합에 동시에 액세스하고 액세스하는 스레드 중 하나가 이를 수정하는 경우 동기화를 수동으로 수행해야 합니다. 일반적으로 집합을 캡슐화하는 일부 개체 동기화를 수행하여 수행됩니다. 그러나 그러한 개체가 없는 경우 Collections.synchronizedSet() 메서드를 사용하여 집합을 래핑해야 합니다. 세트의 비동기 액세스를 피하기 위해 작성 시간 동안 메소드를 사용하는 것이 좋습니다. 다음 코드 스니펫은 동일한 내용을 보여줍니다.

728x90
반응형
LIST

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

모의고사  (0) 2023.01.28
로또의 최고 순위와 최저순위  (0) 2023.01.28
같은 숫자는 싫어  (0) 2023.01.28
최소직사각형  (0) 2023.01.28
3진법 뒤집기  (0) 2023.01.28
728x90
반응형
SMALL

문제 설명

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,

  • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
  • arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.

배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 배열 arr의 크기 : 1,000,000 이하의 자연수
  • 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

입출력 예

arr answer

[1,1,3,3,0,1,1] [1,3,0,1]
[4,4,4,3,3] [4,3]

입출력 예 설명

입출력 예 #1,2문제의 예시와 같습니다.

package LV1;
import java.util.*;
public class H12906 {
    public static int[] solution(int[] arr) {
        ArrayList<Integer> list = new ArrayList<Integer>(); //배열 리스트를 쓰자
        int tem = -1;
        for (int i = 0; i < arr.length; i++) {
            if (tem != arr[i]) {          // arr의 i번째 정수가 tem과 같지 않으면
                tem = arr[i];           // tem에 저장하고
                list.add(arr[i]);       // list에 저장
            }

        }
        int[] answer = new int[list.size()];     //크기가 list만 배열

        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);

        }
        return answer;
    }
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.

    public static void main(String[] args) {
        int[] arr = new int[]{1,1,3,3,0,1,1};
        System.out.println(Arrays.toString(solution(arr)));
    }

}
728x90
반응형
LIST

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

로또의 최고 순위와 최저순위  (0) 2023.01.28
두 개 뽑아서 더하기  (0) 2023.01.28
최소직사각형  (0) 2023.01.28
3진법 뒤집기  (0) 2023.01.28
하샤드 수  (0) 2023.01.28
728x90
반응형
SMALL

문제 설명

명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다.

아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다.

명함 번호 가로 길이 세로 길이

1 60 50
2 30 70
3 60 30
4 80 40

가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다.

모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.


제한사항

  • sizes의 길이는 1 이상 10,000 이하입니다.
    • sizes의 원소는 [w, h] 형식입니다.
    • w는 명함의 가로 길이를 나타냅니다.
    • h는 명함의 세로 길이를 나타냅니다.
    • w와 h는 1 이상 1,000 이하인 자연수입니다.

입출력 예

sizes result

[[60, 50], [30, 70], [60, 30], [80, 40]] 4000
[[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120
[[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133

입출력 예 설명

입출력 예 #1문제 예시와 같습니다.

입출력 예 #2명함들을 적절히 회전시켜 겹쳤을 때, 3번째 명함(가로: 8, 세로: 15)이 다른 모든 명함보다 크기가 큽니다. 따라서 지갑의 크기는 3번째 명함의 크기와 같으며, 120(=8 x 15)을 return 합니다.

입출력 예 #3명함들을 적절히 회전시켜 겹쳤을 때, 모든 명함을 포함하는 가장 작은 지갑의 크기는 133(=19 x 7)입니다.

package LV1;

public class H86491 {

    public static int solution(int[][] sizes){
        int width = 0;
        int height = 0;
        for (int i = 0; i <sizes.length ; i++) {
            int max = Math.max(sizes[i][0], sizes[i][1]);
            int min = Math.min(sizes[i][0], sizes[i][1]);

            if(max > width) width = max;
            if(min > height) height = min;
        }

        return width * height;
    }

   }
package LV1;

public class H86491 {

    public static int solution(int[][] sizes){
        int width = 0;
        int height = 0;
        for (int i = 0; i <sizes.length ; i++) {
            int max = Math.max(sizes[i][0], sizes[i][1]);
            int min = Math.min(sizes[i][0], sizes[i][1]);

            if(max > width) width = max;
            if(min > height) height = min;
        }

        return width * height;
    }

    // 결과값 뭐로 넣을지 고민하기
    public static void main(String args){

        System.out.println();
    }
}
728x90
반응형
LIST

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

두 개 뽑아서 더하기  (0) 2023.01.28
같은 숫자는 싫어  (0) 2023.01.28
3진법 뒤집기  (0) 2023.01.28
하샤드 수  (0) 2023.01.28
콜라츠 추측  (0) 2023.01.28

+ Recent posts