잡다한 배똥월드

728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

function solution(id_list, report, k) {
    let answer = new Array();
    let list = new Array();
    let count = new Array();
    
	//자바스크립트의 배열의 경우 자료형을 정해놓지 않고 선언하기 때문에 한 번은 값을 넣어줘야 나중에 null이 생기지 않음
    for (let i = 0; i < id_list.length; i++) {
        list[id_list[i]] = new ID(); //유저가 신고한 아이디를 담기 위한 배열
        count[id_list[i]] = 0; //유저의 신고 당한 수를 카운트하기 위한 배열
        answer[i] = 0; //유저가 신고한 아이디가 정지된 개수
    }
    
    for (let i = 0; i < report.length; i++) {
        let s = report[i].split(" "); //띄어쓰기로 구분되어 있기 때문에 split으로 문자열 나누기
        
		//만약 유저가 신고한 적 있는 아이디면 continue
        if (list[s[0]].check(s[1])) continue;
	      
		//없으면 배열에 추가하고 신고 당한 수 +1
        list[s[0]].add(s[1]);
        count[s[1]]++;
    }
    
	//id_list 순서로 해당 유저가 신고한 아이디가 k를 넘었는지 체크
    for (let i = 0; i < id_list.length; i++) {
        let arr = list[id_list[i]].arr;
		    
        for (let j = 0; j < arr.length; j++) {
            if (count[arr[j]] >= k) answer[i]++;
        }
    }
    return answer;
}

//ID라는 객체 생성해서 배열을 만들었음
class ID {
    constructor(){
        this.arr = new Array();
    }
    
    add = function(name) {
        this.arr.push(name);
    }
    
    check = function(name) {
        if (this.arr.indexOf(name) != -1) return true;
        return false;
    }
}

 

테스트 1 통과 (0.35ms, 30.1MB)
테스트 2 통과 (0.39ms, 30.1MB)
테스트 3 통과 (190.55ms, 72.4MB)
테스트 4 통과 (0.28ms, 30.1MB)
테스트 5 통과 (0.25ms, 30.1MB)
테스트 6 통과 (3.62ms, 30.2MB)
테스트 7 통과 (4.13ms, 30.3MB)
테스트 8 통과 (10.02ms, 32.6MB)
테스트 9 통과 (92.42ms, 50.9MB)
테스트 10 통과 (88.11ms, 51.7MB)
테스트 11 통과 (209.13ms, 72.6MB)
테스트 12 통과 (0.84ms, 30MB)
테스트 13 통과 (1.38ms, 30.1MB)
테스트 14 통과 (86.74ms, 50MB)
테스트 15 통과 (172.05ms, 55.5MB)
테스트 16 통과 (0.61ms, 30MB)
테스트 17 통과 (0.83ms, 29.9MB)
테스트 18 통과 (0.95ms, 30.1MB)
테스트 19 통과 (1.42ms, 30.1MB)
테스트 20 통과 (128.01ms, 49MB)
테스트 21 통과 (152.67ms, 55.9MB)
테스트 22 통과 (0.16ms, 30MB)
테스트 23 통과 (0.30ms, 29.8MB)
테스트 24 통과 (0.14ms, 30.1MB)

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

프로그래머스

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

programmers.co.kr

 

 

 

 

import java.util.*;
class Solution {
    public int[] solution(int[] numbers) {
    	//더한 값들을 담을 배열 선언
        ArrayList<Integer> arr = new ArrayList<>();
        
        //0번부터 number.length-1까지 방문하는 for문
        for (int i = 0; i < numbers.length; i++) {
        	//i번의 다음 순서부터 number.length-1가지 방문하는 for문
            for (int j = i+1; j < numbers.length; j++) {
            
            	//두 숫자를 더한 값이 arr에 없으면 추가하고 아니면 그냥 넘어가기
                int num = numbers[i] + numbers[j];
                if (arr.indexOf(num) == -1) arr.add(num);
            }
        }
        
        //ArrayList 오름차순 정렬
        Collections.sort(arr);
        
        //ArrayList를 int[]로 변환하면서 리턴
        return arr.stream().mapToInt(Integer::intValue).toArray();
    }
}

 

테스트 1 통과 (2.64ms, 76.6MB)
테스트 2 통과 (1.97ms, 76MB)
테스트 3 통과 (3.38ms, 77.6MB)
테스트 4 통과 (3.40ms, 80MB)
테스트 5 통과 (2.38ms, 73.5MB)
테스트 6 통과 (2.77ms, 75.4MB)
테스트 7 통과 (6.44ms, 77.8MB)
테스트 8 통과 (3.38ms, 74MB)
테스트 9 통과 (2.83ms, 79.2MB)

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr

 

 

 

 

 

import java.util.*;

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        int[] arrival = new int[N+1];  //스테이지별 도달한 플레이어 수
        int[] noClear = new int[N+1];  //스테이지별 클리어하지 못한 플레이어 수
        
        //도달한 플레이어 수 구하기
        //stages[j](멈춰있는 스테이지)가 i(스테이지 레벨)보다 크거나 같으면 +1
        for (int i = 1; i <= N; i++) { 
            for (int j = 0; j < stages.length; j++) {
                if (stages[j] >= i) arrival[i]++; 
            }
        }
        
        //도달은 했지만 클리어하지 못한 플레이어 수 구하기
        //stages[i]의 해당 스테이지 +1
        for (int i = 0; i < stages.length; i++) {
            if (stages[i] > N) continue;
            noClear[stages[i]]++;
        }
        
        //해시맵에 스테이지와 해당 스테이지의 실패율 저장
        HashMap<Integer, Double> map = new HashMap<>();
        for (int i = 1; i <= N; i++) {
            if (arrival[i] == 0)
                map.put(i, (double) 0);
            else 
                map.put(i, (double) noClear[i] / arrival[i]);
                
        }
        
       	//실패율(내림차순)로 정렬
        //실패율이 동일하면 스테이지 레벨이 작은 것이 앞으로 오게(오름차순) 정렬
        List<Map.Entry<Integer, Double>> arr = new ArrayList<Map.Entry<Integer, Double>>(map.entrySet());
        Collections.sort(arr, new Comparator<Map.Entry<Integer, Double>>(){
            @Override
            public int compare(Map.Entry<Integer, Double> o1, Map.Entry<Integer, Double> o2) {
                double v1 = o1.getValue();
                double v2 = o2.getValue();
                
                if (v1 < v2) {
                    return 1;
                } else if (v1 == v2) {
                    if (o1.getKey() > o2.getKey()) {
                        return 1;
                    }
                }
                
                return -1;
            }
        });
        
        for (int i = 0; i < arr.size(); i++) {
            answer[i] = arr.get(i).getKey();
        }
        
        return answer;
    }
}

 

테스트 1 통과 (0.50ms, 73.7MB)
테스트 2 통과 (0.68ms, 80.5MB)
테스트 3 통과 (23.97ms, 93.4MB)
테스트 4 통과 (84.02ms, 92.1MB)
테스트 5 통과 (323.87ms, 86.4MB)
테스트 6 통과 (4.55ms, 82.7MB)
테스트 7 통과 (9.45ms, 88.4MB)
테스트 8 통과 (102.62ms, 87.6MB)
테스트 9 통과 (295.23ms, 88.3MB)
테스트 10 통과 (47.49ms, 81.1MB)
테스트 11 통과 (98.49ms, 94.1MB)
테스트 12 통과 (47.03ms, 84.7MB)
테스트 13 통과 (86.05ms, 100MB)
테스트 14 통과 (0.49ms, 70.3MB)
테스트 15 통과 (20.82ms, 78.3MB)
테스트 16 통과 (8.20ms, 85.4MB)
테스트 17 통과 (12.28ms, 79.9MB)
테스트 18 통과 (5.29ms, 74.5MB)
테스트 19 통과 (2.36ms, 77.1MB)
테스트 20 통과 (10.64ms, 74.1MB)
테스트 21 통과 (8.66ms, 89.8MB)
테스트 22 통과 (147.99ms, 111MB)
테스트 23 통과 (17.61ms, 92.1MB)
테스트 24 통과 (18.99ms, 92.1MB)
테스트 25 통과 (0.52ms, 78.9MB)
테스트 26 통과 (0.50ms, 77.6MB)
테스트 27 통과 (0.49ms, 79.9MB)

 

 

 

 

 

이게 1단계..?

문제를 풀면서 주의해야할 점은 도달한 플레이어 수가 0인 스테이지는 실패율을 0으로 제대로 처리해야 한다

직접 값을 입력하지 않으면 0으로 나누는 것이 되기 때문에 오류가 뜨기 때문이다.

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr

 

 

 

 

 

import java.util.*;

class Solution {
    public int solution(int[] nums) {
        HashMap<Integer, Integer> list = new HashMap<>();
        
        for (int i = 0; i < nums.length; i++) {
            list.put(nums[i], list.getOrDefault(nums[i], 0) + 1);
        }
        
        return (nums.length / 2 > list.size()) ? list.size() : nums.length / 2;
    }
}

 

테스트 1 통과 (0.02ms, 81.9MB)
테스트 2 통과 (0.08ms, 75.6MB)
테스트 3 통과 (0.02ms, 74.3MB)
테스트 4 통과 (0.02ms, 72.7MB)
테스트 5 통과 (0.07ms, 75.3MB)
테스트 6 통과 (0.03ms, 73.5MB)
테스트 7 통과 (0.36ms, 73.8MB)
테스트 8 통과 (0.23ms, 74.1MB)
테스트 9 통과 (0.30ms, 76.5MB)
테스트 10 통과 (0.27ms, 82.4MB)
테스트 11 통과 (0.36ms, 75.5MB)
테스트 12 통과 (0.55ms, 79.1MB)
테스트 13 통과 (1.38ms, 67.5MB)
테스트 14 통과 (0.91ms, 81MB)
테스트 15 통과 (0.92ms, 73.5MB)
테스트 16 통과 (6.12ms, 85.5MB)
테스트 17 통과 (4.86ms, 85.8MB)
테스트 18 통과 (4.50ms, 72MB)
테스트 19 통과 (3.69ms, 79.6MB)
테스트 20 통과 (2.90ms, 81MB)

 

 

 

 

 

해시맵으로 폰켓몬 종류가 몇 종류인지 파악하고

종류 수와 nums / 2 중에서 작은 숫자를 리턴하면 되는데, Math.min( )으로 처리하려고 보니까 시간이 조금 더 길어지길래 그냥 삼항연산자로 처리함

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 모의고사

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

programmers.co.kr

 

 

 

 

import java.util.*;
class Solution {
    public int[] solution(int[] answers) {
        int[] case1 = {1, 2, 3, 4, 5};
        int[] case2 = {2, 1, 2, 3, 2, 4, 2, 5};
        int[] case3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};
        int[] position = new int[3];
        int[] pass = new int[3];
        
        int max = 0;
        for (int i = 0; i < answers.length; i++) {
            pass[0] += (case1[position[0]] == answers[i]) ? 1 : 0;
            pass[1] += (case2[position[1]] == answers[i]) ? 1 : 0;
            pass[2] += (case3[position[2]] == answers[i]) ? 1 : 0;
            
            
            position[0] = position[0] + 1 == case1.length ? 0 : position[0] + 1; 
            position[1] = position[1] + 1 == case2.length ? 0 : position[1] + 1; 
            position[2] = position[2] + 1 == case3.length ? 0 : position[2] + 1; 
            
        }
        max = Math.max(pass[0], Math.max(pass[1], pass[2]));
        
        ArrayList<Integer> arr = new ArrayList<>();
        
        for (int i = 0; i < 3; i++) {
            if (pass[i] == max) arr.add(i+1);
        }
        
        return arr.stream().mapToInt(Integer::intValue).toArray();
    }
}

 

테스트 1 통과 (2.78ms, 80.6MB)
테스트 2 통과 (2.70ms, 74.3MB)
테스트 3 통과 (2.58ms, 75MB)
테스트 4 통과 (2.82ms, 74.2MB)
테스트 5 통과 (2.48ms, 77.1MB)
테스트 6 통과 (3.16ms, 80.1MB)
테스트 7 통과 (2.84ms, 72.7MB)
테스트 8 통과 (3.05ms, 70.5MB)
테스트 9 통과 (4.84ms, 82.2MB)
테스트 10 통과 (2.54ms, 79.4MB)
테스트 11 통과 (4.80ms, 72.4MB)
테스트 12 통과 (3.02ms, 76.2MB)
테스트 13 통과 (8.55ms, 73MB)
테스트 14 통과 (3.33ms, 83.1MB)

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - K번째수

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

programmers.co.kr

 

 

 

 

 

import java.util.*;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        
        for (int i = 0; i < commands.length; i++) {
            int[] arr = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
            Arrays.sort(arr);
            
            answer[i] = arr[commands[i][2]-1];
        }
        return answer;
    }
}

 

테스트 1 통과 (0.35ms, 77.3MB)
테스트 2 통과 (0.46ms, 74.3MB)
테스트 3 통과 (0.33ms, 77.2MB)
테스트 4 통과 (0.45ms, 75.1MB)
테스트 5 통과 (0.33ms, 75.8MB)
테스트 6 통과 (0.32ms, 83MB)
테스트 7 통과 (0.46ms, 75.2MB)

 

 

 

 

범위를 지정해서 배열을 자르는 copyOfRange를 이용해서 자른 후 정렬한 다음에

원하는 위치의 숫자를 가져오면 됨

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수

programmers.co.kr

 

 

 

 

 

import java.util.*;

class Solution {
    public String solution(String[] participant, String[] completion) {
        HashMap<String, Integer> name = new HashMap<>();
        String answer = "";
        
        for (int i = 0; i < completion.length; i++) {
            name.put(completion[i], name.getOrDefault(completion[i], 0) + 1);
        }
        
        for (int i = 0; i < participant.length; i++) {
            int num = name.getOrDefault(participant[i], 0);
            
            if (num == 0) {
                answer = participant[i];
                break;
            }
            
            name.put(participant[i], num - 1);
        }
        
        return answer;
    }
}

 

정확성 테스트
테스트 1 통과 (0.03ms, 74MB)
테스트 2 통과 (0.06ms, 75.8MB)
테스트 3 통과 (0.41ms, 72.9MB)
테스트 4 통과 (0.76ms, 81.2MB)
테스트 5 통과 (0.48ms, 78.2MB)
 
효율성 테스트
테스트 1 통과 (33.16ms, 81.9MB)
테스트 2 통과 (53.05ms, 88.9MB)
테스트 3 통과 (54.83ms, 94.9MB)
테스트 4 통과 (57.47ms, 97.3MB)
테스트 5 통과 (77.58ms, 95.6MB)

 

 

 

 

 

completion에 있는 이름들을 해시맵에 넣고, participant에 있는 이름을 하나씩 지워간다.

만약 getOrDefault()가 0을 리턴하면 그대로 그냥 answer에 이름 넣고 종료.

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 소수 만들기

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때

programmers.co.kr

 

 

 

 

 

class Solution {
    
    boolean[] check;
    int answer;
    
    public int solution(int[] nums) {
        answer = 0;
        
        check = new boolean[nums.length];
        
        func(nums, 0, 0, 0);

        return answer;
    }
    
    public void func(int[] arr, int num, int index, int position) {
        if (index == 3) {
            boolean value = true;
            
            for (int i = 2; i < num; i++) {
                if (num % i == 0) {
                    value = false;
                    break;
                }
            }
            
            if (value) answer++;
            
            return;
        }
        
        for (int i = position; i < arr.length; i++) {
            if (check[i]) continue;
            
            check[i] = true;
            func(arr, num+arr[i], index+1, i+1);
            check[i] = false;
        }
    }
}

 

테스트 1 통과 (0.62ms, 72MB)
테스트 2 통과 (0.79ms, 73.3MB)
테스트 3 통과 (0.28ms, 77.9MB)
테스트 4 통과 (0.21ms, 77.4MB)
테스트 5 통과 (0.99ms, 85.1MB)
테스트 6 통과 (3.21ms, 69.6MB)
테스트 7 통과 (0.28ms, 70.2MB)
테스트 8 통과 (6.34ms, 75.1MB)
테스트 9 통과 (0.78ms, 76.5MB)
테스트 10 통과 (5.25ms, 78.5MB)
테스트 11 통과 (0.07ms, 75.7MB)
테스트 12 통과 (0.04ms, 72.4MB)
테스트 13 통과 (0.06ms, 77.5MB)
테스트 14 통과 (0.05ms, 72.9MB)
테스트 15 통과 (0.03ms, 73.2MB)
테스트 16 통과 (13.90ms, 79.4MB)
테스트 17 통과 (0.63ms, 75.3MB)
테스트 18 통과 (0.45ms, 71.1MB)
테스트 19 통과 (0.06ms, 78.2MB)
테스트 20 통과 (15.36ms, 76.8MB)
테스트 21 통과 (14.37ms, 77.4MB)
테스트 22 통과 (0.49ms, 76MB)
테스트 23 통과 (0.02ms, 74.5MB)
테스트 24 통과 (12.59ms, 76.1MB)
테스트 25 통과 (12.55ms, 78.8MB)
테스트 26 통과 (0.02ms, 76.8MB)

 

 

 

 

 

DP인가..? 어쨋든 하나씩 다녀오면서 숫자 3개를 더했는지 확인하고 더했으면 소수인지 확인 후 계산

 

 

 

 

 

728x90

+ Recent posts