문제 : 정수 배열 numbers 가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두개의 수를 뽑아 더해서 만들수
있는 모든 수를 배열에 오름차순으로 담아 return 하도록 Solution 함수를 완성 하시오
1. Queue의 경우 인터페이스만 있고 별도 클래스가 없기 때문에 뒤에 LinkedList, PriorityQueue 같은 인터페이스를 구현한 클래스들을 사용해야한다!
2. Stack 은 넣고 빼는것이 C# 과 동일 push(), pop();
Queue 는 넣는 것이 offer(), 빼는것이 poll()
풀이
package com.company;
import java.util.*;
import java.util.Queue;
public class GotyaTwoNumberSum {
static int[] numbers = new int[] {2,1,3,4,1};
public static void main(String[] args) {
for (int item: solution(numbers)) {
System.out.println(item);
}
}
static int[] solution(int[] numbers)
{
int[] answer = new int[]{};
List<Integer> sumList = new ArrayList<>();
Queue<Integer> q = new LinkedList();
for (int i = 0; i < numbers.length; i++)
q.offer(numbers[i]);
int index = 1;
do
{
int nowNum = q.poll();
for (int j = index; j < numbers.length; j++)
{
sumList.add(nowNum + numbers[j]);
}
index++;
}while(q.stream().count() > 0);
sumList.sort((x,y) -> x.compareTo(y));
answer = sumList.stream().distinct().mapToInt(Integer::intValue).toArray();
return answer;
}
}
21.02.23 다시 풀이!
- 수정점
1. 중복제거 관련 따로 disticnt 하지 않고 TreeSet 에 넣어 중복 및 오름차순 까지 한번에 진행
2. ArrayList -> 배열로 변환 시 List.toArray(new 데이터타입[데이터 사이즈]) 가능
-> int 와같은 Primitive 타입배열과 Interger 와같은 Wrapper 타입의 List 를 바꿀수는 없다...
-> 처음 생성 시 Integer로 생성하거나 해야 한다
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.TreeSet;
public class program {
/* 두개 뽑아서 더하기
* 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
* */
// Example 2,1,3,4,1
private static int[] array = {2,1,3,4,1};
private static class Solution {
public int[] solution(int[] numbers) {
Queue<Integer> q = new LinkedList<>();
List<Integer> arrayList = new ArrayList<Integer>();
int index = 1;
for (int item : numbers) {
q.add(item);
}
while(q.size() > 0)
{
int tempNum = q.poll();
for (int i = index; i < numbers.length; i++) {
int sumNum = tempNum + numbers[i];
arrayList.add(sumNum);
}
index++;
}
TreeSet<Integer> treeSet = new TreeSet<>(arrayList);
arrayList = new ArrayList<>(treeSet);
int[] answer = new int[arrayList.size()];
for(int i = 0; i < arrayList.size(); i++)
{
answer[i] = arrayList.get(i);
System.out.println(arrayList.get(i));
}
return answer;
}
}
public static void main(String[] args) {
Solution sol = new Solution();
sol.solution(array);
}
}
'알고리즘 > JAVA' 카테고리의 다른 글
[JAVA] K번째 수 - 프로그래머스 (0) | 2020.10.21 |
---|---|
[JAVA] 모의고사 - 프로그래머스 (0) | 2020.10.20 |
[JAVA] 숫자 배열 중 과반수 찾기 (0) | 2020.10.20 |
JDBC 2단계 - DB와 연결, 데이터 받아오기 (0) | 2015.12.16 |
JDBC 1단계 - JAVA에서 데이터베이스 드라이버 검색하기 (0) | 2015.12.16 |