본문 바로가기

혼자 코딩 공부하기/프로그래머스 코딩테스트

231215 프로그래머스 풀어보기

무작위로 K 개의 수 뽑기

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int k) {
        int[] answer = new int[k];
        Arrays.fill(answer, -1);
        answer[0] = arr[0];
        int count = 1;
        A: for(int i = 1; i < arr.length; i++) {
            if (arr[i-1] != arr[i]) {
                for(int j = 0; j<answer.length;j++) {
                    if (arr[i] == answer[j]){
                        continue A;
                    }
                }
                answer[count] = arr[i];
                if (count == k - 1) {
                    break;
                }
                count++;
            }
        }
        return answer;
    }
}

 

배열 원소의 길이

class Solution {
    public int[] solution(String[] strlist) {
        int[] answer = new int[strlist.length];
        int j = 0;
        for(String s : strlist) {
            int i = s.length();
            answer[j] = i;
            j++;
        }
        return answer;
    }
}

 

피자 나눠 먹기 (3)

class Solution {
    public int solution(int slice, int n) {
        int answer = 0;
        if (n % slice != 0) {
            answer = n / slice + 1;
        } else {
            answer = n / slice;
        }
        return answer;
    }
}

 

제곱 수 판별하기

class Solution {
    public int solution(int n) {
        int answer = 2;
        for(int i = 1; i <= 1000; i++) {
            if (i * i == n) {
                answer = 1;
            }
        }
        return answer;
    }
}

그냥 모든 경우의 수를 돌려보았는데 더 좋은 방법 있으면 알려주세요.

 

삼각형의 완성조건 (1)

import java.util.*;

class Solution {
    public int solution(int[] sides) {
        int answer = 2;
        Arrays.sort(sides); // sides 배열을 정렬
        for(int i : sides) {
            if (sides[0] + sides[1] > sides[2]) {
                answer = 1;
            }
        }
        return answer;
    }
}

 

피자 나눠 먹기 (1)

class Solution {
    public int solution(int n) {
        int answer = 0;
        if (n % 7 != 0) {
            answer = n / 7 + 1;
        } else {
            answer = n / 7;
        }
        return answer;
    }
}

 

짝수 홀수 개수

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[2];
        for (int i : num_list){
            if (i % 2 == 0) {
                answer[0]++;
            } else {
                answer[1]++;
            }
        }
        return answer;
    }
}

 

편지

class Solution {
    public int solution(String message) {
        int answer = message.length() * 2;
        return answer;
    }
}

 

문자열 뒤집기

class Solution {
    public String solution(String my_string) {
        String answer = "";
        for(int i = my_string.length() - 1; i >= 0; i--) {
            answer += my_string.charAt(i);
        }
        return answer;
    }
}

 

배열 뒤집기

import java.util.*;

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[num_list.length];
        int j = num_list.length - 1;
        for (int i = 0; i < answer.length; i++) {
            answer[i] = num_list[j];
            j--;
        }
        return answer;
    }
}

 

머쓱이보다 키 큰 사람

class Solution {
    public int solution(int[] array, int height) {
        int answer = 0;
        for(int i : array) {
            if (i > height) {
                answer++;
            }
        }
        return answer;
    }
}

 

[1차] 비밀지도

class Solution {
    public String[] solution(int n, int[] arr1, int[] arr2) {
        String[] answer = new String[n]; // 정답 배열 만들기
        String[] temp = new String[n]; // 임시 배열 만들기
        
        for(int i = 0; i < answer.length;i++) { // 정답 배열 초기화, null 값 제거
            answer[i] = "";
        }
        
        for(int i = 0;i < n;i++) { // 임시 배열에 arr1, arr2 값의 비트 연산 값을 2 진법으로 저장
            temp[i] = Integer.toBinaryString(arr1[i]|arr2[i]);
        }
        // 주석 부분은 밑 for 문으로 대체 가능
        /* for(int i = 0; i < n;i++) { // 배열 크기만큼 반복
            for(int j = 0; j < temp[i].length(); j++) { // temp 배열에 들어있는 문자열 길이만큼 반복
                if (temp[i].length() < n) { // 2 진법이 짧은 경우, ex) 011111 -> 11111 로 저장
                    String a = ""; 
                    for (int k = temp[i].length(); k < n; k++) {
                        a += "0"; // a 값에 "0" 을 저장하여
                    }
                    temp[i] = a.concat(temp[i]); // temp[i] 앞에 이어 붙여줌
                }
                if (temp[i].charAt(j) == '1') { 
                    answer[i] += "#"; // temp[i].charAt(j) 값이 1 이면 "#"
                } else {
                    answer[i] += " "; // // temp[i].charAt(j) 값이 1 이 아니면 " " 추가
                }
            }
        } */
        
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (temp[i].length() < n) {
                    temp[i] = "0".concat(temp[i]); // temp[i] 의 길이가 짧은 만큼 앞에 "0" 을 이어줌
                }
            }
            answer[i] = temp[i].replaceAll(String.valueOf(1), "#").replaceAll(String.valueOf(0), " ");
            // answer[i] = temp[i].replaceAll("1", "#").replaceAll(String.valueOf(0), " "); 로도 대체 가능
        } // temp[i] 의 값을 전부 교체
        return answer;
    }
}

 

중앙값 구하기

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        for (int i = 0; i < array.length;i++) {
            for(int j = 1; j < array.length - i; j++) {
                if (array[j - 1] > array[j]) {
                    int temp = array[j - 1];
                    array[j - 1] = array[j];
                    array[j] = temp;
                }
            }
        }
        answer = array[array.length / 2];
        return answer;
    }
}

 

순서쌍의 개수

class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i = 1 ; i <= n; i++) {
            if (n % i == 0) {
                answer++;
            }
        }
        return answer;
    }
}

 

배열 자르기

class Solution {
    public int[] solution(int[] numbers, int num1, int num2) {
        int[] answer = {};
        answer = new int[num2 - num1 + 1];
        for(int i = 0; num1 <= num2; num1++, i++) {
            answer[i] = numbers[num1];
        }
        return answer;
    }
}

 

배열 두 배 만들기

class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = new int[numbers.length];
        int temp = 0;
        for(int i : numbers){
            answer[temp] = i * 2;
            temp++;
        }
        return answer;
    }
}

 

옷가게 할인 받기

class Solution {
    public int solution(int price) {
        int answer = 0;
        if (price >= 500000) {
            answer = (price / 10) * 8;
        } else if (price >= 300000) {
            answer = price / 10 * 9;
        } else if (price >= 100000) {
            answer = (int) (price * 0.95);
        } else {
            answer = price;
        }
        return answer;
    }
}

 

문자열 안에 문자열

class Solution {
    public int solution(String str1, String str2) {
        int answer = str1.contains(str2) ? 1 : 2;
        return answer;
    }
}

 

아이스 아메리카노

class Solution {
    public int[] solution(int money) {
        int[] answer = new int[2];
        answer[0] = money / 5500;
        answer[1] = money % 5500;
        return answer;
    }
}

 

배열의 유사도

class Solution {
    public int solution(String[] s1, String[] s2) {
        int answer = 0;
        for(int i = 0; i < s1.length; i++) {
            for (int j = 0; j < s2.length; j++) {
                if (s1[i].equals(s2[j])){
                    answer++;
                }
            }
        }
        return answer;
    }
}

 

모음 제거

class Solution {
    public String solution(String my_string) {
        String answer = "";
        for(int i = 0; i < my_string.length();i++) {
            if (my_string.charAt(i) != 'a' && my_string.charAt(i) != 'e' 
            	&& my_string.charAt(i) != 'i' && my_string.charAt(i) != 'o' 
                && my_string.charAt(i) != 'u') {
                answer += Character.toString(my_string.charAt(i));
            }
        }
        return answer;
    }
}

 

더 쉬운 모음 제거.. 방법,,,

해놓고 까먹네 계속

class Solution {
    public String solution(String my_string) {
        String answer = "";

        answer = my_string.replaceAll("[aeiou]", "");

        return answer;
    }
}

 

바로 활용할 수 있는 문제가 나옴

특정 문자 제거하기

class Solution {
    public String solution(String my_string, String letter) {
        String answer = "";
        answer = my_string.replaceAll(letter, "");
        return answer;
    }
}

 

최댓값 만들기(1)

import java.util.*;

class Solution {
    public int solution(int[] numbers) {
        int answer = 0;
        Arrays.sort(numbers);
        answer = numbers[numbers.length - 1] * numbers[numbers.length - 2];
        return answer;
    }
}

 

점의 위치 구하기

class Solution {
    public int solution(int[] dot) {
        int answer = 0;
        if (dot[0] > 0) {
            if (dot[1] > 0) answer = 1;
            else answer = 4;
        } else {
            if (dot[1] > 0) answer = 2;
            else answer = 3;
        }
        return answer;
    }
}

 

문자 반복 출력하기

class Solution {
    public String solution(String my_string, int n) {
        String answer = "";
        for(int i = 0; i < my_string.length(); i++) {
            for(int j = 0; j < n; j++) {
                answer += my_string.charAt(i);
            }
        }
        return answer;
    }
}

 

숨어있는 숫자의 덧셈 (1)

class Solution {
    public int solution(String my_string) {
        int answer = 0;
        for(int i = 0; i < my_string.length(); i++) {
            if (Character.isDigit(my_string.charAt(i))) {
                answer += my_string.charAt(i) - 48;
            }
        }
        return answer;
    }
}

 

자릿수 더하기

class Solution {
    public int solution(int n) {
        int answer = 0;
        String s = Integer.toString(n);
        for(int i = 0; i < s.length(); i++) {
            answer += s.charAt(i) - '0';
        }
        return answer;
    }
}

 

짝수는 싫어요

class Solution {
    public int[] solution(int n) {
        int[] answer = {};
        int temp = 1;
        int arr;
        if (n % 2 != 0) {
            arr = n / 2 + 1;
        } else {
            arr = n / 2;
        }
        answer = new int[arr];
        for(int i = 0; i < arr; i++) {
            answer[i] = temp;
            temp += 2;
        }
        return answer;
    }
}