잡다한 배똥월드

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

 

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    public int solution(String begin, String target, String[] words) {
    
    	//words에 target이 있는지 없는지 확인
        boolean value = false;
        for (int i = 0; i < words.length; i++) {
            if (words[i].equals(target)) {
                value = true;
                break;
            }
        }
        if (!value) return 0;
        
        //words의 단어들을 비교하기 편하게 char배열로 변환 후 ArrayList에 넣기
        ArrayList<char[]> list = new ArrayList<>();
        for (int i = 0; i < words.length; i++) {
            list.add(words[i].toCharArray());
        }
        
        //target도 한번씩 확인을 해야하기 때문에 미리 char배열로 만들어놓기
        char[] base = target.toCharArray();
        
       	//너비우선탐색인 BFS로 탐색하기 위해서 Queue 선언
        Queue<word> q = new LinkedList<>();
        
        //큐에 begin을 char배열로 변환하여 word 객체로 만들어서 넣기
        q.add(new word(0, begin.toCharArray()));
        
        //q가 비워질 때까지 반복
        while (!q.isEmpty()) {
        	//큐의 제일 상단 값 가져오기
            word w = q.poll();
            char[] temp = w.list;
            int index = w.index;
            
            //temp와 target이 같은지 안같은지 비교. 같으면 해당 index 리턴
            if (check(base, temp) == 0) return index;

			//temp와 list에 있는 단어들 비교
            for (int i = 0; i < list.size(); i++) {
                char[] data = list.get(i);
                //글자가 하나만 다르면 list에서 지우면서 q에 넣기
                if (check(temp, data) == 1) q.add(new word(index+1, list.remove(i)));
            }
        }
        return 0;
    }
    
    //a 글자와 b 글자가 몇 글자 다른지 비교하는 함수
    public int check(char[] a, char[] b) {
        int count = a.length;
        for (int i = 0; i < a.length; i++) {
            if (a[i] == b[i]) count--;
        }
        
        return count;
    }
}

class word {
    int index;
    char[] list;
    public word (int i, char[] list) {
        this.index = i;
        this.list = Arrays.copyOf(list, list.length);
    }
}

 

테스트 1 통과 (0.50ms, 83.1MB)
테스트 2 통과 (0.40ms, 81.9MB)
테스트 3 통과 (0.53ms, 69.9MB)
테스트 4 통과 (0.39ms, 74.8MB)
테스트 5 통과 (0.02ms, 75MB)

 

 

 

 

 

 

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

 

 

코딩테스트 연습 - 불량 사용자

개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    HashMap<String, ArrayList<String>> map;
    ArrayList<String> answer;
    public int solution(String[] user_id, String[] banned_id) {
        map = new HashMap<>(); //banned_id에 해당하는 user_id 검출용
        answer = new ArrayList<>(); //만들 수 있는 banned 리스트 제작용
        
        for (int i = 0; i < banned_id.length; i++) {
        	ArrayList<String> list = map.getOrDefault(banned_id[i], new ArrayList<>());
			//만약 map에서 가져온 배열의 길이가 0이 아니면 이미 체크한 banned_id이기 때문에 continue;            
            if (list.size() != 0) continue;
            
            //user_id와 banned_id[i]를 각각 비교하여 불량 사용자에 해당하는지 파악
            for (int j = 0; j < user_id.length; j++) {
                if (banned_id[i].length() == user_id[j].length()) {
                    boolean value = checkWord(user_id[j], banned_id[i]);
                    if (value) list.add(user_id[j]);
                }
            }
            
            map.put(banned_id[i], list);
        }
        
        create(banned_id, 0, new ArrayList<>());
        return answer.size();
    }
    
    public void create(String[] key, int index, ArrayList<String> result) {
        if (key.length == index) {
           	//이미 만든 리스트인지 확인하기 위해 오름차순 정렬 후 String화해서 확인하기
            Collections.sort(result);
            String word = Arrays.toString(result.toArray());
            if (answer.indexOf(word) == -1) answer.add(word);
            return;
        }
        
        ArrayList<String> value = map.get(key[index]);
        for (int i = 0; i < value.size(); i++) {
            String word = value.get(i);
            if (result.indexOf(word) != -1) continue;
            
            ArrayList<String> temp = new ArrayList<>();
            temp.addAll(result);
            temp.add(word);
            
            create(key, index+1, temp);
        }
    }
    
    public boolean checkWord(String a, String b) {
    	//String배열로 비교하면 시간복잡도가 올라가기 때문에 char배열로 비교
        char[] alist = a.toCharArray();
        char[] blist = b.toCharArray();
        
        for (int i = 0; i < alist.length; i++) {
            if (blist[i] != '*' && alist[i] != blist[i]) {
                return false;
            }
        }
        
        return true;
    }
}

 

테스트 1 통과 (0.28ms, 73.4MB)
테스트 2 통과 (0.37ms, 76.7MB)
테스트 3 통과 (0.59ms, 76.4MB)
테스트 4 통과 (0.33ms, 76MB)
테스트 5 통과 (101.17ms, 115MB)
테스트 6 통과 (4.97ms, 75.4MB)
테스트 7 통과 (0.38ms, 75.6MB)
테스트 8 통과 (0.38ms, 74.3MB)
테스트 9 통과 (0.44ms, 71.1MB)
테스트 10 통과 (0.29ms, 74.2MB)
테스트 11 통과 (0.68ms, 73.5MB)

 

 

 

 

 

 

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

 

 

코딩테스트 연습 - 보석 쇼핑

["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7]

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    public int[] solution(String[] gems) {
        int[] answer = new int[2]; //리턴할 배열 {시작위치, 끝위치}
        
        //보석 개수와 각 보석의 배열 위치를 지정하기 위해 Map 활용
        HashMap<String, Integer> names = new HashMap<>(); 
        
        //만약 names에 해당 보석에 대한 지정된 위치가 없다면 새로 추가하기
        for (int i = 0; i < gems.length; i++) {
            if (names.getOrDefault(gems[i], 0) == 0) {
                names.put(gems[i], names.size() + 1);
            }
        }
  
        int size = names.size();
        
        //배열 위치 파악하기 위해서
        int[] list = new int[size+1];
        
        //구간 파악을 위해서
        int count = Integer.MAX_VALUE;
        
        for (int i = 0; i < gems.length; i++) {
        	//보석 위치에 대한 배열은 i+1로 수정하기
            list[names.get(gems[i])] = i+1;
            
            boolean value = true;
            //모두 보석이 등장했는지를 파악하기 위한 for문
            for (int j = 1; j <= size; j++) {
                if (list[j] == 0) {
                    value = false;
                    break;
                }
            }
            
            int min = Integer.MAX_VALUE;
            int max = 0;
            
            //모든 보석이 등장했다면 시작 위치와 끝 위치 파악하고,
            //만약 구간 길이가 저장된 count 보다 짧다면 answer 리셋
            if (value) {
                for (int j = 1; j <= size; j++) {
                    min = Math.min(list[j], min);
                    max = Math.max(list[j], max);
                }
                
                if (max - min < count) {
                    answer[0] = min;
                    answer[1] = max;
                    count = max-min;
                }
            }
        }
        
        return answer;
    }
}

 

정확성 테스트
테스트 1 통과 (0.06ms, 69.2MB)
테스트 2 통과 (0.13ms, 76.1MB)
테스트 3 통과 (0.39ms, 78.7MB)
테스트 4 통과 (2.42ms, 77.6MB)
테스트 5 통과 (0.31ms, 76.1MB)
테스트 6 통과 (0.04ms, 75.2MB)
테스트 7 통과 (0.05ms, 72.2MB)
테스트 8 통과 (2.89ms, 82.9MB)
테스트 9 통과 (3.20ms, 77.8MB)
테스트 10 통과 (3.44ms, 78.4MB)
테스트 11 통과 (5.25ms, 75.3MB)
테스트 12 통과 (3.90ms, 77.4MB)
테스트 13 통과 (6.72ms, 74.6MB)
테스트 14 통과 (16.34ms, 79.2MB)
테스트 15 통과 (7.12ms, 86.9MB)
 
효율성 테스트
테스트 1 통과 (23.14ms, 54.2MB)
테스트 2 통과 (61.27ms, 56.1MB)
테스트 3 통과 (28.08ms, 57.2MB)
테스트 4 통과 (99.63ms, 61.6MB)
테스트 5 통과 (57.07ms, 61.7MB)
테스트 6 통과 (61.71ms, 65.6MB)
테스트 7 통과 (89.76ms, 67.1MB)
테스트 8 통과 (74.50ms, 66.2MB)
테스트 9 통과 (43.17ms, 69.9MB)
테스트 10 통과 (78.63ms, 75.4MB)
테스트 11 통과 (197.14ms, 79.5MB)
테스트 12 통과 (483.12ms, 80MB)
테스트 13 통과 (609.06ms, 79MB)
테스트 14 통과 (170.16ms, 79.5MB)
테스트 15 통과 (377.50ms, 80.1MB)

 

 

 

 

 

 

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

 

 

코딩테스트 연습 - 표 편집

8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO"

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    public String solution(int n, int k, String[] cmd) {
    	//삭제됬는지 안됬는지를 확인할 배열
        boolean[] list = new boolean[n];
        //처음에는 모두 있기 때문에 true로 설정함
        Arrays.fill(list, true);
        
        //위치 파악을 위한 index 변수 선언
        int index = k;
        
        //삭제된 위치들 모을 stack도 선언
        Stack<Integer> delete = new Stack<>();
        
        //위로든 아래로든 움직이는 것을 선언할 때마다 움직일 필요가 없고
        //삭제나 돌아가기가 호출 될 때 움직임을 모았다가 움직이면 되기 때문에
        //따로 모아놓을 변수 선언
        int moveCount = 0;
        
        
        //cmd 순서대로 돌기 위해서 for문
        for (int i = 0; i < cmd.length; i++) {
        	//cmd[i]를 띄어쓰기 기준으로 나눠서 String 배열 만들기
            String[] s = cmd[i].split(" ");
            //문자 비교를 위해 String으로 하기 보단 char로 하기 위해서 char로 형 변환
            char key = s[0].charAt(0);
            //움직이는 숫자를 파악하기 위해 만약 s가 1보다 길면 숫자 변환하고 아님 0 넣기
            int count = s.length > 1 ? Integer.parseInt(s[1]) : 0;
            
            if (key == 'U') { //만약 U이면 위로 움직여야 하기 때문에 moveCount에선 빼기
                moveCount -= count;
            } else if (key == 'D') { //만약 D이면 아래로 움직여야 하기 때문에 더하기
                moveCount += count;
            } else if (key == 'C') { //C이면
            	//move함수 호출해서 index 위치 움직이기
                index = move(list, index, moveCount);
                //moveCount는 움직였기 때문에 0으로 리셋
                moveCount = 0;
                //현 위치인 index를 삭제해야 하기 때문에 false로 변경
                list[index] = false;
                //삭제된 위치는 스택에 넣기
                delete.push(index);
                //그리고 현 위치에 있으면 안되고 아래로 한 칸 이동해야 하기 때문에 next함수 호출
                index = next(list, index);
            } else if (key == 'Z') { //만약 Z이면
            	//현재 위치 다시 수정하고,
                index = move(list, index, moveCount);
                moveCount = 0;
                //스택에서 제일 마지막에 넣은 값을 꺼내와서
                int reset = delete.pop();
                //해당 위치의 값 다시 true로 변환
                list[reset] = true;
            }
        }
        
        //String으로 붙이면 시간 많이 잡아 먹어서 StringBuilder로 추가한 후 toString()으로 문자열 변환
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < list.length; i++) {
            if (list[i]) sb.append("O"); else sb.append("X");
        }
        
        return sb.toString();
    }
    
    public int next(boolean[] list, int index) {
    	//일단 아래로 내려가서 삭제되지 않는 값이 있다면 그 위치로 리턴
        for (int i = index+1; i < list.length; i++) {
            if (list[i]) return i;
        }
        
        //아래로 내려가도 리턴되지 않으면 위로 올라가기
        for (int i = index-1; i >= 0; i--) {
            if (list[i]) return i;
        }
        
        return index;
    }
    
    public int move(boolean[] list, int index, int num) {
        if (num > 0) { //만약 num이 0보다 크면 아래로 내려가야하기 때문에
            for (int i = index+1; i < list.length; i++) {
                if (num == 0) break;
                if (list[i]) num--;
                index++;
            }
        } else {
            for (int i = index-1; i >= 0; i--) {
                if (num == 0) break;
                if (list[i]) num++;
                index--;
            }
        }
        
        return index;
    }
}

 

정확성 테스트
테스트 1 통과 (0.19ms, 79MB)
테스트 2 통과 (0.22ms, 70.3MB)
테스트 3 통과 (0.26ms, 72.8MB)
테스트 4 통과 (0.30ms, 77.4MB)
테스트 5 통과 (0.37ms, 73.6MB)
테스트 6 통과 (0.41ms, 75.7MB)
테스트 7 통과 (0.38ms, 73.8MB)
테스트 8 통과 (0.36ms, 73.4MB)
테스트 9 통과 (0.40ms, 73.2MB)
테스트 10 통과 (0.36ms, 76MB)
테스트 11 통과 (1.47ms, 77.4MB)
테스트 12 통과 (1.45ms, 84.6MB)
테스트 13 통과 (1.59ms, 76.9MB)
테스트 14 통과 (1.69ms, 78MB)
테스트 15 통과 (1.71ms, 79.4MB)
테스트 16 통과 (1.55ms, 78.5MB)
테스트 17 통과 (3.83ms, 78.2MB)
테스트 18 통과 (3.29ms, 73MB)
테스트 19 통과 (2.54ms, 78.3MB)
테스트 20 통과 (2.73ms, 76.5MB)
테스트 21 통과 (2.10ms, 65.5MB)
테스트 22 통과 (2.11ms, 87.3MB)
테스트 23 통과 (0.19ms, 78.9MB)
테스트 24 통과 (0.19ms, 73.7MB)
테스트 25 통과 (0.31ms, 77.5MB)
테스트 26 통과 (0.20ms, 73MB)
테스트 27 통과 (0.23ms, 77.6MB)
테스트 28 통과 (0.27ms, 74.3MB)
테스트 29 통과 (0.26ms, 78.3MB)
테스트 30 통과 (0.25ms, 71.9MB)
 
효율성 테스트
테스트 1 통과 (142.42ms, 103MB)
테스트 2 통과 (170.62ms, 105MB)
테스트 3 통과 (154.68ms, 103MB)
테스트 4 통과 (219.28ms, 108MB)
테스트 5 통과 (219.50ms, 108MB)
테스트 6 통과 (192.67ms, 109MB)
테스트 7 통과 (201.03ms, 94.3MB)
테스트 8 통과 (988.62ms, 96.3MB)
테스트 9 통과 (205.97ms, 110MB)
테스트 10 통과 (218.83ms, 110MB)

 

 

 

 

 

 

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

 

 

코딩테스트 연습 - 자물쇠와 열쇠

[[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    Point[][] points;
    int[][] table;
    int n, m;
    boolean answer;
    public boolean solution(int[][] key, int[][] lock) {
        answer = false;
        n = key.length;
        m = lock.length;
        table = new int[m + (n-1)*2][m + (n-1)*2];
        
        int spin = 0;
        int start = n-1;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (key[i][j] == 1) spin++;
            }
        }
        
        //돌기가 있는 점들 0도, 90도, 180도, 270도 버전으로 미리 배열에 담아놓기
        points = new Point[4][spin];
        int position = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (key[i][j] == 1) {
                    points[0][position] = new Point(i, j);
                    points[1][position] = new Point(j, n-i-1);
                    points[2][position] = new Point(n-i-1, n-j-1);
                    points[3][position] = new Point(n-j-1, i);
                    position++;
                }
            }
        }
        
        //table은 key가 상하좌우 대각선 모두 다 넣을 수 있도록 범위를 넓힌 상태에서
        //lock 부분 체크해놓기
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < m; j++) {
                table[i+n-1][j+n-1] = lock[i][j];
            }
        }
        
        //key 넣으면서 체크하기
        for (int i = 0; i < table.length - (n-1); i++) {
            for (int j = 0; j < table.length - (n-1); j++) {
                for (int k = 0; k < 4; k++) {
                    if (call(i, j, k)) return true;
                }
            }
        }
        
        return false;
    }
    
    //만약 func함수 호출 후 answer이 true가 된다면 그냥 바로 리턴하기
    public boolean call(int x, int y, int index) {
        func(x, y, n-1, index, 0);
        if (answer) return true;
        
        return false;
    }
    
    public void func(int sX, int sY, int sLock, int index, int num) {
    	//num과 points[index]의 길이가 같으면 key의 돌기를 다 돈 것이기 때문에
        //lock 부분이 전부 1이면 true 아니면 false 리턴
        if (num == points[index].length) {
            for (int i = sLock; i < sLock+m; i++) {
                for (int j = sLock; j < sLock+m; j++) {
                    if (table[i][j] == 0 || table[i][j] == 2) return;
                }
            }
            
            answer = true;
            return;
        }
        
        Point p = points[index][num];
        
        if (table[sX + p.x][sY + p.y] == 0) {
            table[sX + p.x][sY + p.y]++;
            func(sX, sY, sLock, index, num+1);
            table[sX + p.x][sY + p.y]--;
        }
        
    }
}

class Point {
    int x, y;
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

 

테스트 1 통과 (0.22ms, 75.7MB)
테스트 2 통과 (0.19ms, 76.3MB)
테스트 3 통과 (1.07ms, 81.6MB)
테스트 4 통과 (0.18ms, 73.2MB)
테스트 5 통과 (0.55ms, 73.7MB)
테스트 6 통과 (0.47ms, 76.5MB)
테스트 7 통과 (1.08ms, 73.8MB)
테스트 8 통과 (2.12ms, 76.1MB)
테스트 9 통과 (1.27ms, 79.5MB)
테스트 10 통과 (2.19ms, 72.5MB)
테스트 11 통과 (3.20ms, 71.9MB)
테스트 12 통과 (0.19ms, 79.4MB)
테스트 13 통과 (0.75ms, 75.2MB)
테스트 14 통과 (0.33ms, 77.6MB)
테스트 15 통과 (1.02ms, 73.8MB)
테스트 16 통과 (0.83ms, 79.1MB)
테스트 17 통과 (0.68ms, 83.8MB)
테스트 18 통과 (0.80ms, 79MB)
테스트 19 통과 (0.19ms, 77.7MB)
테스트 20 통과 (1.15ms, 70.5MB)
테스트 21 통과 (1.30ms, 73.1MB)
테스트 22 통과 (0.83ms, 78.8MB)
테스트 23 통과 (0.46ms, 74.2MB)
테스트 24 통과 (0.40ms, 75.1MB)
테스트 25 통과 (1.22ms, 75.4MB)
테스트 26 통과 (3.86ms, 73.3MB)
테스트 27 통과 (3.33ms, 76.9MB)
테스트 28 통과 (0.81ms, 76.2MB)
테스트 29 통과 (0.51ms, 72.6MB)
테스트 30 통과 (0.93ms, 78.3MB)
테스트 31 통과 (1.23ms, 77.3MB)
테스트 32 통과 (1.61ms, 79.4MB)
테스트 33 통과 (0.99ms, 75.8MB)
테스트 34 통과 (0.30ms, 73.7MB)
테스트 35 통과 (0.37ms, 71.1MB)
테스트 36 통과 (0.40ms, 75.7MB)
테스트 37 통과 (0.38ms, 77.7MB)
테스트 38 통과 (0.28ms, 77.5MB)

 

 

 

 

 

 

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

 

 

코딩테스트 연습 - 다단계 칫솔 판매

민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후,

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
	//이름에 대한 부모와 자기 포인트 확인용 해시맵
    HashMap<String, Family> map;
    public int[] solution(String[] enroll, String[] referral, String[] seller, int[] amount) {
        int[] answer = new int[enroll.length];
        map = new HashMap<>();
        
        //본인에 대한 부모와 포인트 설정
        for (int i = 0; i < enroll.length; i++) {
            Family f = new Family(referral[i], 0);
            map.put(enroll[i], f);
        }
        
        //센터는 따로 enroll에 없기 때문에 따로 추가하기
        map.put("-", new Family("", 0));
        
        for (int i = 0; i < seller.length; i++) {
            int money = amount[i] * 100; //판매금액
            String son = seller[i]; //판매자
            
            //센터까지 올라가야하기 때문에 while문 활용
            while (true) {
            	//부모에게 넘길 돈 현재 금액의 10%
                int parentMoney = (int) (money * 0.1);
                
                //부모에게 주고 남은 돈
                int sonMoney = money - parentMoney;
                
                //남은 돈은 추가하고, 부모 이름 리턴
                son = map.get(son).addPoint(sonMoney);
                
                //부모에게 넘길 돈으로 현재 금액 설정하기
                money = parentMoney;
                
                //만약 부모에게 넘길 돈이 0원이거나 부모가 없는 경우(센터일 경우) while문 탈출
                if (son.equals("") || money == 0) break;
            }
        }
        
        //enroll로 answer에 포인트 값 넣기
        for (int i = 0; i < enroll.length; i++) {
            answer[i] = map.get(enroll[i]).point;
        }
        return answer;
    }
}

class Family {
    String parent;
    int point;
    public Family(String parent, int point) {
        this.parent = parent;
        this.point = point;
    }
    
    public String addPoint(int point) {
        this.point += point;
        return parent;
    }
}

 

테스트 1 통과 (0.28ms, 83.4MB)
테스트 2 통과 (0.42ms, 95.5MB)
테스트 3 통과 (0.33ms, 79.8MB)
테스트 4 통과 (0.41ms, 79.7MB)
테스트 5 통과 (0.84ms, 72.2MB)
테스트 6 통과 (4.60ms, 105MB)
테스트 7 통과 (4.57ms, 103MB)
테스트 8 통과 (6.65ms, 97.5MB)
테스트 9 통과 (17.94ms, 98.1MB)
테스트 10 통과 (38.93ms, 131MB)
테스트 11 통과 (28.77ms, 133MB)
테스트 12 통과 (37.54ms, 130MB)
테스트 13 통과 (18.79ms, 141MB)

 

 

 

 

 

 

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

 

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있

programmers.co.kr

 

 

 

 

 

class Solution {
    boolean[] check; //다녀갔는지 체크용
    int answer = 0;
    public int solution(int n, int[][] computers) {
        check = new boolean[n];
        
        //아직 방문하지 않은 네트워크는 func함수로 보내기
        for (int i = 0; i < n; i++) {
            if (check[i]) continue;
            answer++; //보낼 때 새로운 네트워크의 시작이라는 뜻으로 answer + 1 하기
            func(n, computers, i);
        }
        return answer;
    }
    
    public void func(int n, int[][] computers, int num){
        for (int i = 0; i < n; i++) {
            if (num == i) continue; //num이랑 i가 같으면 같은 네트워크이기 때문에 pass
            if (check[i]) continue; //check[i]가 true면 방문한 네트워크이기 때문에 pass
            if (computers[num][i] == 0) continue; //computers[num][i]가 0이면 연결되어 있지 않은 네트워크이기 때문에 pass
            check[i] = true; //방문했다고 check[i]는 true로 변경
            func(n, computers, i); 이제 또 i와 연결된 네트워크를 찾기 위해서 함수로 보내기
        }
    }
}​

 

테스트 1 통과 (0.02ms, 75.4MB)
테스트 2 통과 (0.02ms, 73.3MB)
테스트 3 통과 (0.03ms, 76.6MB)
테스트 4 통과 (0.03ms, 66.9MB)
테스트 5 통과 (0.01ms, 75.2MB)
테스트 6 통과 (0.07ms, 76.4MB)
테스트 7 통과 (0.03ms, 75.3MB)
테스트 8 통과 (0.09ms, 70.3MB)
테스트 9 통과 (0.04ms, 80.4MB)
테스트 10 통과 (0.04ms, 74.3MB)
테스트 11 통과 (0.36ms, 75.6MB)
테스트 12 통과 (0.18ms, 75.7MB)
테스트 13 통과 (0.12ms, 72.8MB)

 

 

 

 

 

 

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

 

 

코딩테스트 연습 - 정수 삼각형

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

programmers.co.kr

 

 

 

 

 

class Solution {
    public int solution(int[][] triangle) {
        int answer = 0;
        //합계를 구해서 담을 배열
        int[][] sBoard = new int[triangle.length][triangle.length];
        sBoard[0][0] = triangle[0][0];
        
        for (int i = 1; i < triangle.length; i++) {
            만약 3번째 행이면 3번째 열까지만 가면 되기 때문에 범위 설정함
            for (int j = 0; j <= i; j++) {
                sBoard[i][j] = Math.max(sBoard[i][j], sBoard[i-1][j] + triangle[i][j]);
                if (j == 0) continue;
                sBoard[i][j] = Math.max(sBoard[i][j], sBoard[i-1][j-1] + triangle[i][j]);
            }
            
            if (i == triangle.length - 1) {
                for (int j = 0; j <= i; j++) {
                    answer = Math.max(answer, sBoard[i][j]);
                }
            }
        }
        return answer;
    }
}

 

정확성 테스트
테스트 1 통과 (0.04ms, 75.2MB)
테스트 2 통과 (0.03ms, 75.9MB)
테스트 3 통과 (0.05ms, 76.9MB)
테스트 4 통과 (0.08ms, 74.5MB)
테스트 5 통과 (0.58ms, 74MB)
테스트 6 통과 (0.13ms, 73.5MB)
테스트 7 통과 (0.38ms, 67.9MB)
테스트 8 통과 (0.11ms, 78.9MB)
테스트 9 통과 (0.03ms, 77.8MB)
테스트 10 통과 (0.09ms, 75.9MB)
효율성 테스트
테스트 1 통과 (14.73ms, 61.2MB)
테스트 2 통과 (11.26ms, 63.1MB)
테스트 3 통과 (12.07ms, 61.5MB)
테스트 4 통과 (7.95ms, 60.9MB)
테스트 5 통과 (11.59ms, 61.5MB)
테스트 6 통과 (13.98ms, 61.6MB)
테스트 7 통과 (13.37ms, 64MB)
테스트 8 통과 (10.53ms, 57MB)
테스트 9 통과 (14.63ms, 74.5MB)
테스트 10 통과 (12.15ms, 61.6MB)

 

 

 

 

 

 

728x90

+ Recent posts