문제 설명

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다.
※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다.

예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.

경과 시간다리를 지난 트럭다리를 건너는 트럭대기 트럭

0 [] [] [7,4,5,6]
1~2 [] [7] [4,5,6]
3 [7] [4] [5,6]
4 [7] [4,5] [6]
5 [7,4] [5] [6]
6~7 [7,4,5] [6] []
8 [7,4,5,6] [] []

따라서, 모든 트럭이 다리를 지나려면 최소 8초가 걸립니다.

solution 함수의 매개변수로 다리 길이 bridge_length, 다리가 견딜 수 있는 무게 weight, 트럭별 무게 truck_weights가 주어집니다. 이때 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 return 하도록 solution 함수를 완성하세요.

제한 조건

  • bridge_length는 1 이상 10,000 이하입니다.
  • weight는 1 이상 10,000 이하입니다.
  • truck_weights의 길이는 1 이상 10,000 이하입니다.
  • 모든 트럭의 무게는 1 이상 weight 이하입니다.

입출력 예

bridge_lengthweighttruck_weightsreturn

2 10 [7,4,5,6] 8
100 100 [10] 101
100 100 [10,10,10,10,10,10,10,10,10,10] 110

출처

※ 공지 - 2020년 4월 06일 테스트케이스가 추가되었습니다.

 

나의 풀이

 

1. 한번의 반복문이 도는 것을 1초로 잡는다.

2. 더이상 남아있는 트럭이 없을 때 까지 반복한다.

3. 큐의 길이가 다리 길이보다 작을 경우 큐에 트럭을 올린다.

4. 큐에 들어가있는 트럭 무게의 합과 추가될 트럭 무게의 합이 다리의 무게한도 보다 작으면 큐에 트럭을 추가하고, 

   아닐 경우 큐에 0을 추가함 (앞에 추가되어 있는 값들을 한칸 씩 밀어내기 위해!)

5. 큐의 길이가 다리의 길이보다 같거나 커질 경우 큐에 있는 트럭을 삭제하고 위의 로직을 반복한다. 

6. 트럭이 모두 큐에 add 되면, 마지막 트럭이 큐에서 삭제 되는 수를 더해준다. (큐의 길이를 더해서 리턴)

 

    public int solution(int bridge_length, int weight, int[] truck_weights) {
        int answer = 0;

        Queue<Integer> bridgeQueue = new ArrayDeque<>();
        Queue<Integer> waitQueue = new ArrayDeque<>();

        for (int i: truck_weights) {
            waitQueue.add(i);
        }
        int sum = 0;
        while (!waitQueue.isEmpty()){
            answer++;
            if(bridgeQueue.size() < bridge_length){
                if(sum + waitQueue.peek() <= weight){
                    sum += waitQueue.peek();
                    bridgeQueue.add(waitQueue.poll());

                }else{
                    bridgeQueue.add(0);
                }
            }else{
                sum -= bridgeQueue.poll();
                if(sum + waitQueue.peek() < weight){
                    sum += waitQueue.peek();
                    bridgeQueue.add(waitQueue.poll());

                }else{
                    bridgeQueue.add(0);
                }
            }
        }
        bridgeQueue.size();
        return answer + bridge_length;
    }

 

문제 설명

게임개발자인 죠르디는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다.
죠르디는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다.

게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 5 x 5 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓이게 됩니다. 다음 그림은 [1번, 5번, 3번] 위치에서 순서대로 인형을 집어 올려 바구니에 담은 모습입니다.

만약 같은 모양의 인형 두 개가 바구니에 연속해서 쌓이게 되면 두 인형은 터뜨려지면서 바구니에서 사라지게 됩니다. 위 상태에서 이어서 [5번] 위치에서 인형을 집어 바구니에 쌓으면 같은 모양 인형 두 개가 없어집니다.

크레인 작동 시 인형이 집어지지 않는 경우는 없으나 만약 인형이 없는 곳에서 크레인을 작동시키는 경우에는 아무런 일도 일어나지 않습니다. 또한 바구니는 모든 인형이 들어갈 수 있을 만큼 충분히 크다고 가정합니다. (그림에서는 화면표시 제약으로 5칸만으로 표현하였음)

게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.

[제한사항]

  • board 배열은 2차원 배열로 크기는 5 x 5 이상 30 x 30 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • 0은 빈 칸을 나타냅니다.
    • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.

입출력 예

boardmovesresult

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

입출력 예에 대한 설명

입출력 예 #1

인형의 처음 상태는 문제에 주어진 예시와 같습니다. 크레인이 [1, 5, 3, 5, 1, 2, 1, 4] 번 위치에서 차례대로 인형을 집어서 바구니에 옮겨 담은 후, 상태는 아래 그림과 같으며 바구니에 담는 과정에서 터트려져 사라진 인형은 4개 입니다.

public int solution(int[][] board, int[] moves) {
        int answer = 0;

        Stack<Integer> answerStack = new Stack<>();
        for(int i = 0; i < moves.length; i++)
        {
            for(int j = 0; j < board.length; j++)
            {
                if(board[board.length - 1][moves[i] - 1] == 0)
                    break;
                if(board[j][moves[i] - 1] != 0)
                {
                    answerStack.add(board[j][moves[i] - 1]);
                    board[j][moves[i] - 1] = 0;
                    if(answerStack.size() >= 2 && answerStack.peek() == answerStack.get(answerStack.size() - 2))
                    {
                        answerStack.pop();
                        answerStack.pop();
                        answer += 2;
                    }
                    break;
                }
            }
        }
        return answer;
    }

스택을 사용하면 간단하게 풀수있다.

안드로이드 앱 개발 공부를 하면서 예제에서 많이 접했던 방법이었으나, 정확히 이것이 빌더패턴인지는

모르고 있었는데 "스프링 부트와 AWS로 혼자 구현하는 웹 서비스" 이 책을 읽다가 명확히 알게 되었다.

 

빌더패턴이란?

Example.builder()
	.a(a)
    	.b(b)
    	.build();

자바 또는 안드로이드 공부를 하다보면 구글링을 할 때 한번씩은 꼭 봤을 것이다. 빌더패턴과 비교되는 대상은 

여러가지가 있겠지만, 책에서는 생성자를 통해 소개했다.

 

public Example(String a, String b)
{
	this.a = a;
    	this.b = b;
}

이 두가지의 차이점은 무엇일까??

 

만약 개발자가 new Example(b,a) 처럼 a와 b의 위치를 변경해도 코드를 실행하기 전까지는

문제를 찾을 수 없다는 것이다.

 

하지만 빌더 패턴을 사용하면! 위의 예제와 같이 어느 필드에 어떤 값을 채워야 하는지 명확하게 인지할 수 있다!

 

 

'Java' 카테고리의 다른 글

AnnotationProcessor 직접 구현해보기  (1) 2024.03.25

문제 설명

위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.

삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.

제한사항

  • 삼각형의 높이는 1 이상 500 이하입니다.
  • 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.

입출력 예

triangleresult

[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30

 

public int solution(int[][] triangle) {
        int answer = 0;

        for(int i = 1; i < triangle.length; i++)
        {
            for (int j = 0; j < triangle[i].length; j++)
            {
                if(j == 0)
                {
                    triangle[i][j] += triangle[i - 1][j];
                }else if ( j == triangle[i].length - 1)
                {
                    triangle[i][j] += triangle[i - 1][j - 1];
                }
                else
                {
                    triangle[i][j] += Math.max(triangle[i - 1][j - 1],triangle[i - 1][j]);
                }
            }
        }
        int max = 0;
        for(int k = 0; k < triangle[triangle.length - 1].length; k++)
        {
            if (triangle[triangle.length - 1][k] > max)
                max = triangle[triangle.length - 1][k];
        }

        answer = max;

        return answer;
    }

 

위에서 부터 배열에 값을 더해가면서 가장 아래에 있는 값 중에 가장 큰 수가 답이 된다. 처음 풀어본 레벨 3 단계 문제이다!

 

 

문제 설명

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.

섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)

Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.
Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • scoville의 길이는 2 이상 1,000,000 이하입니다.
  • K는 0 이상 1,000,000,000 이하입니다.
  • scoville의 원소는 각각 0 이상 1,000,000 이하입니다.
  • 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.

입출력 예

scovilleKreturn

[1, 2, 3, 9, 10, 12] 7 2

입출력 예 설명

  1. 스코빌 지수가 1인 음식과 2인 음식을 섞으면 음식의 스코빌 지수가 아래와 같이 됩니다.
    새로운 음식의 스코빌 지수 = 1 + (2 * 2) = 5
    가진 음식의 스코빌 지수 = [5, 3, 9, 10, 12]

  2. 스코빌 지수가 3인 음식과 5인 음식을 섞으면 음식의 스코빌 지수가 아래와 같이 됩니다.
    새로운 음식의 스코빌 지수 = 3 + (5 * 2) = 13
    가진 음식의 스코빌 지수 = [13, 9, 10, 12]

모든 음식의 스코빌 지수가 7 이상이 되었고 이때 섞은 횟수는 2회입니다.

 

public int solution(int[] scoville, int K) {
        int answer = 0;
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();

        for (int num:scoville)
        { priorityQueue.add(num); }

        while(!priorityQueue.isEmpty())
        {
            try
            {
                int a = priorityQueue.poll();
                int b = priorityQueue.poll();
                priorityQueue.add(a + (b * 2));
                answer++;
                if(priorityQueue.peek() > K)
                {
                    break;
                }
            }catch (Exception e)
            {
                return -1;
            }    
        }
        
        return answer;
    }

우선순위 큐를 이용하여 가장 작은 수 두가지를 꺼낸 후 첫째 수 + 둘째 수 * 2 연산 수행 후 다시 우선순위 큐에 값을 넣는다. 만약 우선순위 큐에서 가장 작은 수를 꺼냈을 때, K 보다 클 경우 answer를 리턴하고, Exception이 발생하는 경우는 우선순위 큐에 모든 값을 꺼내서 K보다 큰 수를 못 만들었을 경우이다. 이때 Exception에 대한 처리로 return -1 을 해주면 K보다 큰 수를 만들 수 없을 경우에 대해서 처리할 수 있다.

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • ()() 또는 (())() 는 올바른 괄호입니다.
  • )()( 또는 (()( 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예

sanswer

()() true
(())() true
)()( false
(()( false

입출력 예 설명

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

 

 boolean solution(String s) {
        boolean answer = false;
        char[] chars = s.toCharArray();

        Stack stack = new Stack();

        if(chars[0] == ')')
        {
            return answer;
        }

        for (char i : chars
        ) {
            if(i == '(')
            {
                stack.push(i);
            }
            else if (i == ')' && !stack.isEmpty())
            {
                stack.pop();
            }
        }
        if(stack.empty())
        {
            answer = true;
            return answer;
        }
        else
        {
            return answer;
        }
    }

 

처음에는 ArrayList를 이용하여 풀었으나, 효율성 테스트에서 떨어졌다. 그 이후 스택을 사용하는 방법으로 변경하고,

처음부터 닫는 괄호가 나올경우 무조건 올바른 괄호가 나올 수 없으므로 그에대한 처리 후에, 여는 괄호가 나올 경우 스택에 추가하고 닫는 괄호가 나올 경우 스택에 추가했던 여는 괄호를 삭제한다. 이 과정이 끝난 후에 스택에 값이 남아있을 경우, 올바른 괄호가 아니고, 스택이 비어있을 경우 올바른 괄호이다!

문제 설명

선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.

예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.

위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다.

선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.

제한 조건

  • 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
  • 스킬 순서와 스킬트리는 문자열로 표기합니다.
    • 예를 들어, C → B → D 라면 CBD로 표기합니다
  • 선행 스킬 순서 skill의 길이는 1 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다.
  • skill_trees는 길이 1 이상 20 이하인 배열입니다.
  • skill_trees의 원소는 스킬을 나타내는 문자열입니다.
    • skill_trees의 원소는 길이가 2 이상 26 이하인 문자열이며, 스킬이 중복해 주어지지 않습니다.

입출력 예

skillskill_treesreturn

"CBD" ["BACDE", "CBADF", "AECB", "BDA"] 2

입출력 예 설명

  • BACDE: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트립니다.
  • CBADF: 가능한 스킬트리입니다.
  • AECB: 가능한 스킬트리입니다.
  • BDA: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트리입니다.

  1. 스킬 트리: 유저가 스킬을 배울 순서 

 

public class SkillTree {

    public int solution(String skill, String[] skill_trees) {
        int answer = 0;
        ArrayList<String> array = new ArrayList<>();
        for (int i = 0; i < skill_trees.length; i++)
        {
            String str = "";
            for(int j = 0; j < skill_trees[i].length(); j++) {

                for (int k = 0; k < skill.length(); k++) {
                    if (skill.charAt(k) == skill_trees[i].charAt(j)) {
                        str += skill.charAt(k);
                    }
                }
            }
            array.add(str);
            System.out.println("결과는 " + str);
        }
        for(int i = 0; i < array.size(); i++)
        {
            int[] answers = new int[array.size()];
            answers[i] = 1;
            for (int j = 0; j < array.get(i).length(); j++)
            {
                if (array.get(i).charAt(j) != skill.charAt(j))
                {
                    System.out.println(skill_trees[i] + ":" + array.get(i).charAt(j) + "스킬을 배우기전에 "
                            + skill.charAt(j) + "스킬을 먼저 배워야 합니다.");
                    answers[i] = 0;
                    break;
                }
            }
            if (answers[i] == 1)
            {
                answer++;
            }
        }
        System.out.println("정답 수는" + answer);
        return answer;
    }

    public static void main(String[] args)
    {

        SkillTree s = new SkillTree();
        s.solution("CBD",new String[]{"BACDE","CBADF","AECB","BDA"});
    }


}


 

 

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

공부를 위해 포스팅 된 글이므로, 부정확한 정보를 포함하고 있음을 감안하고 읽어주시기 바랍니다.

 

오늘은 구글 맵에서 기본적으로 제공되는 UI 버튼들을 커스텀 해서 사용하고, 활성화, 비활성화 

하는 작업을 했다.

 

https://developers.google.com/maps/documentation/android-sdk/controls 

 

Controls and Gestures  |  Maps SDK for Android  |  Google Developers

Using the Maps SDK for Android, you can customize the way in which users can interact with your map, by determining which of the built in UI components appear on the map and which gestures are allowed. Code samples The ApiDemos repository on GitHub include

developers.google.com

기본적으로 GoogleMap 객체에서 GetUISettings() 를 호출해서 버튼들을 얻어 올 수 있으나,

위치를 설정하기가 너무 불편해서 직접 레이아웃에 버튼을 생성하여 이벤트를 걸어줬다.

 

btn_myLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mGoogleMap.animateCamera(CameraUpdateFactory.newLatLng(new LatLng(mCurrentLocatiion.getLatitude(),mCurrentLocatiion.getLongitude())));
            }});
        btn_zoomIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) { mGoogleMap.animateCamera(CameraUpdateFactory.zoomIn());}});
        btn_zoomOut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) { mGoogleMap.animateCamera(CameraUpdateFactory.zoomOut()); }});

 

    @Override
    public void onLocationChanged(Location location) {

        currentPosition
                = new LatLng( location.getLatitude(), location.getLongitude());


//        Log.d(TAG, "onLocationChanged : ");

        String markerTitle = getCurrentAddress(currentPosition);
        String markerSnippet = "위도:" + location.getLatitude()
                + " 경도:" + location.getLongitude();

        //현재 위치에 마커 생성하고 이동
        setCurrentLocation(location, markerTitle, markerSnippet);

        mCurrentLocatiion = location;
    }

 

 

문제 설명

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다.

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 조건

  • 시험은 최대 10,000 문제로 구성되어있습니다.
  • 문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
  • 가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

입출력 예

answersreturn

[1,2,3,4,5] [1]
[1,3,2,4,2] [1,2,3]

입출력 예 설명

입출력 예 #1

  • 수포자 1은 모든 문제를 맞혔습니다.
  • 수포자 2는 모든 문제를 틀렸습니다.
  • 수포자 3은 모든 문제를 틀렸습니다.

따라서 가장 문제를 많이 맞힌 사람은 수포자 1입니다.

입출력 예 #2

  • 모든 사람이 2문제씩을 맞췄습니다.
import java.util.ArrayList;

public class FirstSearch1 {
    public int[] solution(int[] answers) {


        int[] arr1 = {1,2,3,4,5};
        int[] arr2 = {2,1,2,3,2,4,2,5};
        int[] arr3 = {3,3,1,1,2,2,4,4,5,5};

        int[] cnt = new int[3];

        for(int i = 0; i < answers.length; i++)
        {
            if(answers[i] == arr1[i%5])
            {
                cnt[0]++;
            }
            if(answers[i] == arr2[i%8])
            {
                cnt[1]++;
            }
            if(answers[i] == arr3[i%10])
            {
                cnt[2]++;
            }
        }
        int max = Math.max(Math.max(cnt[0], cnt[1]),cnt[2]); // max값 구하기
        ArrayList<Integer> list = new ArrayList<Integer>();

        if(max==cnt[0]) list.add(1);
        if(max==cnt[1]) list.add(2);
        if(max==cnt[2]) list.add(3);

        int[] answer = new int[list.size()];

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

        return answer;
    }

    public static void main(String[] args) {
        FirstSearch1 firstSearch1 = new FirstSearch1();
        int[] arr = firstSearch1.solution(new int[]{1,2,3,4,5});
        for(int i = 0; i < arr.length; i++)
        {
            System.out.println(arr[i]);
        }

    }
}

+ Recent posts