https://programmers.co.kr/learn/courses/30/lessons/43165

 

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

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

programmers.co.kr

코드 설명

연산 (-,+)을 branch로 생각하여 DFS를 구성하였다.

처음 main문에서 넘겨주는 값을 number[level]로 했다가 바닥조건에서 이를 고려안해서 실수했다....

프로그래머스 환경에서 dfs 디버깅은 좀 쉽지 않은것 같다...

 

코드

#include <string>
#include <vector>

using namespace std;
int arr[2]={-1,1};
int answer=0;
void dfs(int level,int now,vector<int>&numbers,int target){
    if(level==numbers.size()){
        if(now==target) answer++;
        return;
    }
    for(int i=0;i<2;i++){
        int sum=numbers[level]*arr[i];
        now+=sum;
    
        dfs(level+1,now,numbers, target);
        now-=sum;
        
    }
    
}
int solution(vector<int> numbers, int target) {
    
    
    int n=numbers.size();
    dfs(0,0,numbers,target);
    
    return answer;
}

'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 더 맵게  (0) 2021.05.01
[프로그래머스] 프린터  (0) 2021.04.30
[프로그래머스] 기능개발  (0) 2021.04.30
[프로그래머스] 입국심사  (0) 2021.04.27
[프로그래머스] H-Index  (0) 2021.04.27

 

https://programmers.co.kr/learn/courses/30/lessons/43238

 

코딩테스트 연습 - 입국심사

n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한

programmers.co.kr

코드 설명 

시간 이라는 개념을 이분탐색으로 찾아야 한다는게 포인트이다.

최소값은 1분 ~ 최대값은 times가 가진 최대 시간 * n(사람수) 이다.

그 후, mid시간 동안 몇명을 검사 할수 있는지 cnt를 통해 구한다. ( 구하는 법은 시간/times[i])

 

또한 최대값을 설정할때 long long 설정에 유의하자!

long long endd=n*(long long)times[k-1];

 

코드

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

long long solution(int n, vector<int> times) {
    long long answer = 0;
    //입국심사 사람 1,000,000,000 => longlong 이분탐색 생각!
    sort(times.begin(),times.end());
    long long k=times.size();
    long long startt=1;
    long long endd=n*(long long)times[k-1];
    long long cnt=0;
    
    
    while(startt <= endd){
    long long midd=(startt+endd)/2;
        cnt=0;
     for(int i=0;i<k;i++){
        cnt += midd/times[i]; //시간당 심사인원한명이 심사할수 있는 인원수 합
    }
       
        if(cnt<n){  // 불가능
            startt = midd+1;    
        }
        else{ //가능 
            //최소시간 구하기
            answer=midd;
            endd=midd-1;
        }
        
    
    }
    
    
    
    return answer;
}

'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 더 맵게  (0) 2021.05.01
[프로그래머스] 프린터  (0) 2021.04.30
[프로그래머스] 기능개발  (0) 2021.04.30
[프로그래머스] 타겟넘버  (0) 2021.04.27
[프로그래머스] H-Index  (0) 2021.04.27

https://programmers.co.kr/learn/courses/30/lessons/42747

 

코딩테스트 연습 - H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표

programmers.co.kr

코드 설명

문제의 이해가 푸는 시간보다 훨씬 더걸렸다....

문제 예시가 [3,0,6,1,5] 이다. 이를 인덱스와 비교해보면 (정렬 후)

0 6

1 5

2 3

3 1

4 0

순서로 인덱스가 더 커지지 않는 2까지 count하여 답은 3이다.

 

하나 더 생각해야 할점은 다음과 같이 구현하였을 때 [1,1,0,0,0] 케이스를 생각해보면 count와 원소값이 같다면 바로 리턴시켜주어야 한다.

코드

 

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

int solution(vector<int> citations) {
    int answer = 0;
    sort(citations.begin(),citations.end(),greater<int>());
    
    if(citations[0]==0) return answer;
    
    
    for(int i=0;i<citations.size();i++){
        if(i<=citations[i]){
            if(answer==citations[i]) break;
            answer++;
            
        }
        
  
    }
    
    
    return answer;
}

 

velog.io/@trevor522 에서 기록중 

+ Recent posts