본문 바로가기
Algorithm Study/Programmers

[프로그래머스] 폰켓몬 / 같은 숫자는 싫어 / K번째 수 (Java)

by HanaV 2023. 6. 5.
728x90

1. 폰켓몬

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

 

프로그래머스

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

programmers.co.kr

 

코드 (vscode로 짜서 답을 출력하는 형태로 ..)

import java.util.HashMap;
import java.util.Map;

public class week01_1Phonekemon {

    public static void main(String[] args) {

        //1. 배열의 이름은 nums
        String[] nums = {"1", "1", "3", "4", "5", "4", "5", "1", "5", "1"};

        //2. 배열의 값을 값:중복된 횟수 로 HashMap 만들기
        Map<String, Integer> map = new HashMap<String, Integer>();

        //2-1. map에 for문으로 값을 먼저 넣고, 값이 또 나오면 count+1을 함
        for(String str : nums) {
            Integer count = map.get(str);
            
            if(count == null) { //새로 나오는 key값이면 key:1회 로 설정
                map.put(str, 1);
            } else { //중복 key값이면 현재 count에 +1을 함
                map.put(str, count+1);
            }
        }
        //Check: Map 출력
        /*
        for (String key : map.keySet()) {
            System.out.println(key + ":" + map.get(key));
        }*/

        //3-1. HashMap의 길이가 n/2보다 작거나 같으면 result = HashMap의 길이
        int result = 0;
        if (map.size() <= (nums.length)/2) {
            result = map.size();
        } else { //3-2. n/2보다 크면 result = 배열의 길이/2
            result = (nums.length)/2;
        }

        //4. result 출력하기
        System.out.println("result = " + result);
    }

}

결과

result = 4

#피드백
HashSet: 중복을 허용하지 않는 HashSet을 사용하면 좀 더 쉽게 구할 수 있다.

 

 

2. 같은 숫자는 싫어

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

 

프로그래머스

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

programmers.co.kr

 

코드

import java.util.ArrayList;
import java.util.Arrays;

public class week01_2IHateSameNumber {
    public static void main(String[] args) {
        
        //1. arr을 ArrayList 로 변환
        String[] arr = {"1", "1", "1", "2", "2", "0", "3", "1", "1", "5"};
        ArrayList<String> list = new ArrayList<>(Arrays.asList(arr));
        //Check
        //System.out.println(list);

        //2. list의 앞 뒤 숫자 비교하기
        int i = 0;
        for (i = 0; i < list.size()-1; i++){
            //2-1. 앞 뒤 숫자가 같으면..
            if (Integer.parseInt(list.get(i)) - Integer.parseInt(list.get(i+1)) == 0) {
                list.remove(i+1);
                i--; //list.size()가 1만큼 줄어드므로
                //Check
                //System.out.println(list.size());
            } 
            //2-2. 앞 뒤 숫자가 다르면 그대로 for문 진행
        }
        //3. 배열 출력하기
        System.out.println(list);
    }
}

결과

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

#피드백
stack 이나 queue로도 풀 수 있다고 함 ...

 

 

3. K번째 수

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

 

프로그래머스

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

programmers.co.kr

 

코드

import java.util.ArrayList;
import java.util.Arrays;

public class week01_3kthNumber {
    public static void main(String[] args) {
        
        //1. array, commands 정의
        int[] array = {1, 5 ,2, 6, 3, 7, 4};
        int[][] commands = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}, {2, 6, 2}};

        int row = commands.length; //행의 개수 구하기
        //Check
        //System.out.println(row);
        int n = 0;
        ArrayList<String> result = new ArrayList<>();

        //2. for문으로 commands에 있는 i, j, k값 순서대로 꺼내기
        for (n=0; n<row; n++) {
            int i = commands[n][0];
            int j = commands[n][1];
            int k = commands[n][2];
            //Check
            //System.out.println("i:" + i +" j:" + j +" k:" + k);

            //3. 배열 i~j만큼 자르기
            int[] newArr = Arrays.copyOfRange(array, i-1, j);
            //Check
            //System.out.println(Arrays.toString(newArr));

            //4. 배열 정렬하기
            Arrays.sort(newArr);

            //5. index[k-1]인 수를 결과값 배열에 add
            int number = newArr[k-1];
            result.add(Integer.toString(number));
        }

        //6. result 출력하기
        System.out.println(result);
    }
}

결과

[5, 6, 3, 3]

#피드백
Arrays.sort() 와  Collection.sort() 의 복잡도를 고려해서 사용해보자 (Collection sort가 더 낮음)

728x90

"); wcs_do();