알고리즘 6

최성원·2022년 1월 19일
0

알고리즘

목록 보기
6/6

Day-6

문제 : 두 개 뽑아서 더하기

문제 설명

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

제한 조건

numbers의 길이는 2 이상 100 이하입니다.

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

입출력 예

number [2,1,3,4,1] / return [2,3,4,5,6,7]

number [5,0,2,7] / return [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 해야 합니다.

코드

import java.util.*;

class Solution {
    public int[] solution(int[] numbers) {
//         ArrayList로 arr를 Integer 타입으로 선언
        ArrayList<Integer> arr = new ArrayList<>();
//         i가 numbers.length-1과 같아질 때까지 for문을 반복
        for (int i = 0; i < numbers.length; i++) {
//         j가 numbers.length-1과 같아질 때까지 for문을 반복
            for(int j = i+1; j<numbers.length; j++) {
//         numbers[i] + numbers[j]의 결과가 arr에 포함되어 있지 않는 다면 numbers[i] + numbers[j]를 arr에 add를 사용하여 추가하는 과정을 반복
                if(!arr.contains(numbers[i] + numbers[j])) {
                    arr.add(numbers[i]+ numbers[j]);
                }
            }
        }
//      arr를 Collections.sort를 사용하여 정렬
        Collections.sort(arr);
//      int[] 타입으로 반환할 변수 answer를 arr.size() 크기로 선언
        int[] answer = new int[arr.size()];
//      for문을 사용하여 arr의 원소들을 get을 사용하여 answer에 저장
        for(int i=0;i<arr.size(); i++) {
            answer[i] = arr.get(i);
        }
//      return을 사용하여 answer을 반환
        return answer;
    }
}

문제 : 문자열 내 마음대로 정렬하기

문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

제한 사항

strings는 길이 1 이상, 50이하인 배열입니다.

strings의 원소는 소문자 알파벳으로 이루어져 있습니다.

strings의 원소는 길이 1 이상, 100이하인 문자열입니다.

모든 strings의 원소의 길이는 n보다 큽니다.

인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

입출력 예

strings ["sun", "bed", "car"] / n = 1 / return ["car", "bed", "sun"]

strings ["abce", "abcd", "cdx"] / n = 2 / return ["abcd", "abce", "cdx"]

입출력 예 설명

입출력 예 1

"sun", "bed", "car"의 1번째 인덱스 값은 각각 "u", "e", "a" 입니다. 이를 기준으로 strings를 정렬하면 ["car", "bed", "sun"] 입니다

입출력 예 2

"abce"와 "abcd", "cdx"의 2번째 인덱스 값은 "c", "c", "x"입니다.

따라서 정렬 후에는 "cdx"가 가장 뒤에 위치합니다. "abce"와 "abcd"는

사전순으로 정렬하면 "abcd"가 우선하므로, 답은 ["abcd", "abce", "cdx"] 입니다.

코드

import java.util.*;

class Solution {
    public String[] solution(String[] strings, int n) {
        
//         반환할 배열 answer의 길이는 strings배열과 같으므로 strings.length로 지정한다.
        String[] answer = new String[strings.length];
//         n번째문자를 기존 문자열에 붙여 만든 새로운 문자열을 넣을 ArrayList를 생성한다.
        ArrayList<String> array = new ArrayList<String>();
//         strings의 길이만큼 반복문을 사용해 새로운 문자열(strings[i].charAt(n) + strings[i])을 넣어준다. (ex) sun -> usun, car -> acar)
        for (int i=0; i<strings.length; i++) {
            array.add(strings[i].charAt(n) + strings[i]);
        }
//         Collections.sort()함수로 정렬한다.
        Collections.sort(array);
//         정렬된 배열을 substring을 사용해 1~마지막으로 자른다.
        for (int i=0; i<array.size(); i++) {
            answer[i] = array.get(i).substring(1);
        }
        
        return answer;
    }
}
profile
각성구

0개의 댓글