잡다한 배똥월드

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

 

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    public String solution(String p) {
        return func(p); //func함수 자체가 String을 리턴하기 때문에 바로 리턴
    }
    
    public String func(String word) {
        if (word.equals("")) return ""; //만약 빈 문자열이면 그대로 리턴함
        
        //문자열을 붙이는 작업이 많기 때문에 시간 절약을 위해 StringBuilder 객체 선언하여 활용
        StringBuilder result = new StringBuilder();
        
        int position = 0; //u와 v를 구분하기 위한 위치를 담을 변수
        int count = 0; //균형잡힌 문자열을 알아내기 위해서 사용하는 변수
        String[] s = word.split("");
        
        //올바른 문자열인지 아닌지를 구분하기 위한 변수
        //만약 시작이 "("이면 올바른 문자열이고, 그렇지 않으면 아닌 것
        boolean value = s[0].equals(")") ? false : true; 
        
        for (int i = 0; i < s.length; i++) {
            count += (s[i].equals("(")) ? 1 : -1; //만약 s[i]가 "("면 +1을 아니면 -1을 함
            if (count == 0) { 
            	//괄호의 모양에 따라 +1 또는 -1 하면서 0이 되는 순간이 있음
                //그 순간이 괄호 숫자가 딱 떨어지는 순간이기 때문에 여기서 잘라야 함
                position = i + 1;
                break;
            }
        }
        
        String u = word.substring(0, position);
        String v = word.substring(position, word.length());
        
        if (value) { //올바른 문자열일 때
            result.append(u);
            result.append(func(v));
        } else { //올바른 문자열이 아닐 때
            result.append("(");
            result.append(func(v)); //v는 다시 처음부터 반복해서 리턴해야 하기 때문에 함수 호출
            result.append(")");
            
            char[] uSplit = u.substring(1, u.length()-1).toCharArray(); //앞 뒤 제외하고 배열 만들기
            
            for (int i = 0; i < uSplit.length; i++) { //괄호 뒤집기
                uSplit[i] = uSplit[i] == '(' ? ')' : '(';
            }

            result.append(new String(uSplit));
        }
        
        return result.toString(); //리턴값이 String이기 때문에 toString() 필수
    }
}

 

테스트 1 통과 (0.21ms, 80.9MB)
테스트 2 통과 (0.14ms, 78.8MB)
테스트 3 통과 (0.11ms, 72.7MB)
테스트 4 통과 (0.20ms, 71MB)
테스트 5 통과 (0.22ms, 76.5MB)
테스트 6 통과 (0.16ms, 73.8MB)
테스트 7 통과 (0.29ms, 73.6MB)
테스트 8 통과 (0.20ms, 77MB)
테스트 9 통과 (0.32ms, 77.2MB)
테스트 10 통과 (0.26ms, 77.6MB)
테스트 11 통과 (0.80ms, 76.2MB)
테스트 12 통과 (1.38ms, 74.5MB)
테스트 13 통과 (1.96ms, 73.7MB)
테스트 14 통과 (3.80ms, 70.1MB)
테스트 15 통과 (3.40ms, 74.3MB)
테스트 16 통과 (12.50ms, 85.6MB)
테스트 17 통과 (5.09ms, 76.5MB)
테스트 18 통과 (11.14ms, 82.8MB)
테스트 19 통과 (21.54ms, 89.8MB)
테스트 20 통과 (20.80ms, 84.5MB)
테스트 21 통과 (5.69ms, 76MB)
테스트 22 통과 (4.01ms, 80.6MB)
테스트 23 통과 (41.25ms, 91.5MB)
테스트 24 통과 (4.12ms, 75.4MB)
테스트 25 통과 (9.37ms, 74.4MB)

 

 

 

 

 

문제에서 재귀적으로 수행하라길래 진짜 재귀함수로 풀었음.

 

 

 

 

 

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

 

 

코딩테스트 연습 - 메뉴 리뉴얼

레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    HashMap<Integer, HashMap<String, Integer>> map;
    public String[] solution(String[] orders, int[] course) {
        ArrayList<String> answer = new ArrayList<>();
        map = new HashMap<>();
        
        for (int i = 0; i < orders.length; i++) {
            char[] word = orders[i].toCharArray();
            Arrays.sort(word);
            orders[i] = new String(word);
        }
        
        for (int i = 0; i < orders.length; i++) {
            String[] word = orders[i].split("");
            func(word, new StringBuilder(), 0);
        }
        
        for (int i = 0; i < course.length; i++) {
            HashMap<String, Integer> list = map.getOrDefault(course[i], new HashMap<>());
            
            int max = 2;
            ArrayList<String> temp = new ArrayList<>();
            for (String key : list.keySet()) {
                int length = list.get(key);
                if (max < length) {
                    max = length;
                    temp = new ArrayList<>();
                    temp.add(key);
                } else if (max == length) {
                    temp.add(key);
                }
            }
            
            answer.addAll(temp);
        }
        
        Collections.sort(answer);
        return answer.toArray(new String[answer.size()]);
    }
    
    public void func(String[] base, StringBuilder word, int p) {
        HashMap<String, Integer> arr = map.getOrDefault(word.length(), new HashMap<>());
        
        arr.put(word.toString(), arr.getOrDefault(word.toString(), 0) + 1);    
        map.put(word.length(), arr);
            
        if (base.length == word.length()) return;
        
        for (int i = p; i < base.length; i++) {
            StringBuilder sb = new StringBuilder(word);
            sb.append(base[i]);
            
            func(base, sb, i+1);
        }
    }
}

 

테스트 1 통과 (1.68ms, 69.6MB)
테스트 2 통과 (1.35ms, 75.3MB)
테스트 3 통과 (1.47ms, 71.4MB)
테스트 4 통과 (1.70ms, 79.4MB)
테스트 5 통과 (1.65ms, 69.5MB)
테스트 6 통과 (3.32ms, 73.5MB)
테스트 7 통과 (2.57ms, 81MB)
테스트 8 통과 (10.82ms, 92.1MB)
테스트 9 통과 (9.36ms, 79.9MB)
테스트 10 통과 (11.29ms, 92.3MB)
테스트 11 통과 (8.01ms, 86.6MB)
테스트 12 통과 (8.32ms, 79.4MB)
테스트 13 통과 (8.73ms, 80.8MB)
테스트 14 통과 (12.31ms, 81.5MB)
테스트 15 통과 (11.57ms, 85.4MB)
테스트 16 통과 (12.73ms, 89.9MB)
테스트 17 통과 (19.45ms, 93.4MB)
테스트 18 통과 (18.44ms, 82.1MB)
테스트 19 통과 (18.81ms, 91.7MB)
테스트 20 통과 (16.94ms, 89.8MB)

 

 

 

 

 

orders의 단어들 일단 오름차순 정렬한다.

정렬한 orders 단어들을 하나씩 꺼내면서 만들 수 있는 단어 리스트를 만들면서 몇 번 만들어지는지를 체크한다

그리고 나서 course를 하나씩 꺼내면서 해당 길이에 대해서 가장 많이 조합된 단어를 answer에 넣는다

마지막으로 answer을 오름차순 정렬한 후 리턴한다.

 

 

 

 

 

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

 

 

코딩테스트 연습 - 행렬 테두리 회전하기

6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3]

programmers.co.kr

 

 

 

 

 

import java.util.*;

class Solution {
    public int[] solution(int rows, int columns, int[][] queries) {
        int[] answer = new int[queries.length];
        int[][] table = new int[rows][columns];
        
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                table[i][j] = (i * columns) + (j + 1); 
            }
        }
        
        for (int i = 0; i < queries.length; i++) {
            PriorityQueue<Integer> q = new PriorityQueue<>();
            
            int x1 = queries[i][0] - 1;
            int y1 = queries[i][1] - 1;
            int x2 = queries[i][2] - 1;
            int y2 = queries[i][3] - 1;
            
            int fPoint = table[x1][y1];
            
            for (int j = y1+1; j <= y2; j++) {               
                q.add(fPoint);
                int temp = table[x1][j];
                table[x1][j] = fPoint;
                fPoint = temp;
            }
            
            for (int j = x1+1; j <= x2; j++) {               
                q.add(fPoint);
                int temp = table[j][y2];
                table[j][y2] = fPoint;
                fPoint = temp;
            }
            
            for (int j = y2-1; j >= y1; j--) {               
                q.add(fPoint);
                int temp = table[x2][j];
                table[x2][j] = fPoint;
                fPoint = temp;
            }
            
            for (int j = x2-1; j >= x1; j--) {               
                q.add(fPoint);
                int temp = table[j][y1];
                table[j][y1] = fPoint;
                fPoint = temp;
            }
            
            answer[i] = q.poll();
        }
        return answer;
    }
}

 

테스트 1 통과 (0.36ms, 81.2MB)
테스트 2 통과 (0.36ms, 77.2MB)
테스트 3 통과 (51.86ms, 108MB)
테스트 4 통과 (39.44ms, 125MB)
테스트 5 통과 (42.90ms, 107MB)
테스트 6 통과 (66.05ms, 121MB)
테스트 7 통과 (53.02ms, 102MB)
테스트 8 통과 (34.97ms, 113MB)
테스트 9 통과 (44.36ms, 99.6MB)
테스트 10 통과 (41.18ms, 118MB)
테스트 11 통과 (36.46ms, 102MB)

 

 

 

 

 

우선순위 큐에다가 움직이는 숫자들 넣고 제일 위에 숫자 꺼내면 정렬이나 따로 비교하지 않아도 가장 작은 숫자를 가져올 수 있음

시계방향으로 움직이기 때문에 위쪽 오른쪽 아래쪽 왼쪽으로 이동하는데 이것은 for문으로 처리함.

문제 그대로를 코드로 옮기는 문제라서 어렵진 않았고, 우선순위 큐에 대해서 조금 더 공부하게 됨.

 

 

 

 

우선 순위 큐 참고 링크

 

[Java] Priority Queue(우선 순위 큐)

PriorityQueue란 우선순위 큐로써 일반적인 큐의 구조 FIFO(First In First Out)를 가지면서, 데이터가 들어온 순서대로 데이터가 나가는 것이 아닌 우선순위를 먼저 결정하고 그 우선순위가 높은 데이터

velog.io

 

 

 

 

 

 

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

 

 

코딩테스트 연습 - 짝지어 제거하기

짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙

programmers.co.kr

 

 

 

 

 

import java.util.*;

class Solution {
    public int solution(String s) {
        char[] word = s.toCharArray();
        Stack<Character> box = new Stack<>();
        
        for (int i = 0; i < word.length; i++) {
            char temp = (!box.isEmpty()) ? box.peek() : ' ';
            if (temp == word[i]) {
                box.pop();
            } else {
                box.push(word[i]);
            }
        }
        
        return (!box.isEmpty()) ? 0 : 1;
    }
}

 

정확성 테스트
테스트 1 통과 (0.18ms, 71.2MB)
테스트 2 통과 (11.53ms, 72.4MB)
테스트 3 통과 (14.57ms, 88.5MB)
테스트 4 통과 (16.23ms, 80.2MB)
테스트 5 통과 (17.90ms, 98.1MB)
테스트 6 통과 (14.90ms, 76.5MB)
테스트 7 통과 (13.61ms, 80.2MB)
테스트 8 통과 (13.85ms, 80.4MB)
테스트 9 통과 (0.20ms, 76.9MB)
테스트 10 통과 (0.39ms, 76.9MB)
테스트 11 통과 (0.17ms, 73.3MB)
테스트 12 통과 (0.18ms, 76.6MB)
테스트 13 통과 (0.18ms, 74.5MB)
 
효율성 테스트
테스트 1 통과 (65.74ms, 63.2MB)
테스트 2 통과 (49.36ms, 58.2MB)
테스트 3 통과 (54.24ms, 60.9MB)
테스트 4 통과 (53.64ms, 60.9MB)
테스트 5 통과 (55.08ms, 60.6MB)
테스트 6 통과 (54.41ms, 61MB)
테스트 7 통과 (54.21ms, 60.3MB)
테스트 8 통과 (53.56ms, 60.6MB)

 

 

 

 

 

스택에 한 글자씩 넣으면서 제일 위에 있는 글자와 넣을 단어가 동일하면

넣을 글자는 넣지 않고 넘어가고, 제일 위에 있는 글자는 꺼내서 없앤다.

그렇게 단어를 다 돌 때까지 반복한 후에 마지막에 만약에 스택이 비어있다면 1을 리턴하고 비어있지 않으면 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

 

 

코딩테스트 연습 - 가장 먼 노드

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

programmers.co.kr

 

 

 

 

 

import java.util.*;

class Solution {
    public int solution(int n, int[][] edge) {
        int answer = 0;
        int position = 0;
        
        Node[] list = new Node[n+1];
        for (int i = 1; i < list.length; i++) {
            list[i] = new Node();
        }
        
        for(int i = 0; i < edge.length; i++) {
            int a = edge[i][0];
            int b = edge[i][1];
            
            Node node1 = list[a];
            Node node2 = list[b];
            
            node1.addNode(b);
            node2.addNode(a);
        }
        
        Queue<Integer> q = new LinkedList<>();
        list[1].far = 0;
        q.add(1);
        while (!q.isEmpty()) {
            int num = q.poll();
            Node node = list[num];
            
            int far = node.far;
            ArrayList<Integer> arr = node.arr;
            
            for (int i = 0; i < arr.size(); i++) {
                int lNum = arr.get(i);
                Node temp = list[lNum];
                if (temp.far != -1) continue;
                
                temp.far = far + 1;
                if (position < far+1) {
                    position = far+1;
                    answer = 1;
                } else if (position == far+1) {
                    answer++;
                }
                
                q.add(lNum);
            }
        }
        
        return answer;
    }
    
    class Node {
        ArrayList<Integer> arr;
        int far = -1;
        public Node() {
            arr = new ArrayList<>();
        }
        
        public void addNode(int num) {
            if (arr == null) arr = new ArrayList<>();
            
            arr.add(num);
        }
    }
}

 

테스트 1 통과 (0.51ms, 77.5MB)
테스트 2 통과 (0.81ms, 78.1MB)
테스트 3 통과 (0.63ms, 81.4MB)
테스트 4 통과 (1.31ms, 75.1MB)
테스트 5 통과 (3.85ms, 76.4MB)
테스트 6 통과 (4.07ms, 78.1MB)
테스트 7 통과 (39.22ms, 104MB)
테스트 8 통과 (38.44ms, 111MB)
테스트 9 통과 (36.97ms, 112MB)

 

 

 

 

 

너비 우선 탐색(BFS)로 탐색했다.

우선 노드 번호와 해당 노드가 연결되어 있는 노드 번호들을 묶기 위해서 Node라는 객체를 정의하였고, 거리는 far로 수정하였다.

그래서 만약에 현재 가장 멀다고 적어놓은 position의 값보다 far이 더 넓다면 해당 far로 answer과 position을 리셋했고, 같다면 answer++를 하였다.

그래프에 대해서 어려운데 이번에는 비교적 잘 푼 것 같다.

 

 

 

 

그래프 설명 참고

 

[Algorithm] 자료구조 그래프(Graph)란 무엇인가?

그래프란? 그래프는 정점과 간선으로 이루어진 자료구조입니다. 정확히는 정점(Vertex)간의 관계를 표현하는 조직도라고 볼수도 있겠습니다. 그런면에서 트리는 그래프의 일종인 셈입니다. 다만

coding-factory.tistory.com

 

 

 

 

 

 

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

 

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수

programmers.co.kr

 

 

 

class Solution {
    
    int answer = 0;
    
    public int solution(int[] numbers, int target) {
        func(numbers, target, 0, 0);
        return answer;
    }
    
    public void func(int[] numbers, int target, int p, int num) {
        if (p == numbers.length) {
            if (target == num) answer++;
            return;
        }
        
        func(numbers, target, p+1, num + numbers[p]);
        func(numbers, target, p+1, num - numbers[p]);
        
    }
}

 

테스트 1 통과 (4.36ms, 86.8MB)
테스트 2 통과 (4.42ms, 74.9MB)
테스트 3 통과 (0.22ms, 79.7MB)
테스트 4 통과 (0.58ms, 84.9MB)
테스트 5 통과 (0.59ms, 64.6MB)
테스트 6 통과 (0.37ms, 78.1MB)
테스트 7 통과 (0.18ms, 77MB)
테스트 8 통과 (0.27ms, 76.7MB)

 

 

 

 

 

각 자리의 숫자들의 부호를 구분하는 것이기 때문에 앞에서부터 +냐 -냐 구분하면서 함수 호출

 

 

 

 

 

728x90

+ Recent posts