CodingTest_0레벨

kangjuju·2023년 1월 4일
0

코딩테스트 연습

목록 보기
1/3
post-thumbnail

배열 두배 만들기

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

알고리즘은 완성 하였으나 int[] answer배열의 동적 할당에서 막혀 검색으로 알아보았다.

    int[] answer = new int[numbers.length];

이 방법으로 인풋을 담당하는 numbers 배열의 길이만큼 동적할당을 하도록 함

중앙값 구하기

import java.util.Arrays;

class Solution {
    public int solution(int[] array) {
        int answer = 0;
        Arrays.sort(array);
        double a = array.length/2;
        int b = (int) Math.ceil(a);
        answer = array[b];
        
        return answer;
    }
}

배열의 중앙값을 솎아내는건 풀었지만 간단히 오름,내림차순하는 방법을 몰라 검색했다.

import java.util.Arrays;
Arrays.sort(array);

import하고 Arrays.sort(배열명) 으로 간단하게 오름차순 정렬 후 문제를 풀었다.

최빈값 구하기 (Lv.0.9)

코드를 입력하세요

짝수는 싫어요

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

이번에도 배열의 길이 할당에서 막혔다.

답에서는 배열의 길이가 주어지는 n값이 짝수면 n/2개, 홀수면 n/2+1개라는 구문을 if문으로 풀어냈다.

ex) n = 10일때, 배열의 길이는 n/2 = [5]로 할당. "1,3,5,7,9"
n = 11일때, 배열의 길이는 n/2+1 = [6]로 할당. "1,3,5,7,9,11"

배열 길이를 할당 한 다음에는
for문으로 i가 1씩 n까지 증가하며 홀수를 검사한다.
홀수일때 answer[k]에 해당 i를 저장한다.
처음에 answer[i]로 했다가 에러를 띄웠는데 지금생각해보니 당연한듯.
i가 배열의 크기 이상까지 갈 예정인데 주소와 i값을 동일시 생각한게 잘못
어찌보면 당연하지만 모를땐 한없이 어려운듯, 배열에 많이 약한거같다.

양꼬치

내가 쓴 풀이

class Solution {
    public int solution(int n, int k) {
        int answer = 0;
        if(n >= 10){
            if(k >= n/10) {
                k -= n/10;
            } //서비스적용
        }
        answer = (12000 * n) + (2000*k);
        return answer;
    }
}

매우 간단한 풀이. 참고해도 좋을 것 같다

class Solution {
    public int solution(int n, int k) {
        return n * 12000 + k * 2000 - (n / 10 * 2000);
    }
}

중복된 숫자 개수

내가 쓴 풀이

class Solution {
    public int solution(int[] array, int n) {
        int answer = 0;
        for(int i = 0; i < array.length; i++){
            if(array[i] == n){
                answer++;
            }
        }
        return answer;
    }
}

다른 사람의 풀이

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

배열을 다룰때 향상된for문을 사용하는 것이 가독성부분에서 좋은 판단인거같다.

머쓱이보다 키 큰 사람

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

향상된 for문으로 문제를 풀어보았다.

배열의 평균값

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        int n = 0;
        for(int i : numbers){
            answer += i;
            n++;
        }
        return answer /= n;
    }
}

배열의 평균값

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

점의 위치 구하기

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

최대한 있는 그대로를 if문에 녹여내 봤다. 더 간단하게 짤 수 있다

피자나눠먹기

 public int solution(int n) {
        int answer = 1; //피자한판
        int pizza = 7; //판당 조각수
        while(true){
            if(pizza*answer >= n) break;
            else if(pizza*answer <= n) answer++;
        }
        return answer;
    }

while반복문으로 루프를 걸어놓고 피자7조각x판수가 사람인원보다 작으면 판수를 추가하도록 if문을 만들었다.

짝수홀수 개수

 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[] strlist) {
        int[] answer = new int[strlist.length];
        for(int i = 0; i < strlist.length; i++){
            answer[i] = strlist[i].length();
        }
        return answer;
    }
}

length뒤의 괄호 유무를 신경써야함

편지

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

아이스 아메리카토

class Solution {
    public int[] solution(int money) {
        int[] answer = new int[2];
        answer[1] = money;
        while(5500 <= answer[1]){        
            answer[1] -= 5500;
            answer[0]++;
        }
        return answer;
    }
}

반복문을 들어가기 전 돈을 잔돈에 저장해서 하나로 굴렸다.

0개의 댓글