https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net


파이썬 list로 풀었을 때 보단 코드가 많이 길어졌지만,, 

이분 탐색 첫 도전 ~_~ 

#include <bits/stdc++.h>
using namespace std;


int n;
int a[100005];

int func(int target, int len){
  int st =0;
  int en = len-1;
  while(st<=en){
    int mid = (st+en)/2;
    if(a[mid]<target)
      st = mid+1;
    else if(a[mid]>target)
      en = mid-1;
    else
    {
      return mid;
    }
  }
  return -1;
}

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    cin>>a[i];
  }
  sort(a,a+n);

  int m;
  cin>>m;
  while(m--){
    int num;
    cin>>num;
    if(func(num,n)== -1) cout<<0<<"\n";
    else cout<<1<<"\n";
  }
  
}

'Algorithm > BOJ' 카테고리의 다른 글

[c++] 백준 1764 듣보잡  (0) 2021.01.15
[c++] 백준 1026 보물  (0) 2021.01.15
[c++] 백준 2839 설탕 배달  (0) 2021.01.14
[c++] 백준 6359 만취한 상범  (0) 2021.01.14
[c++] 백준 1929 소수 구하기  (0) 2021.01.12

https://www.acmicpc.net/problem/2839

 

2839번: 설탕 배달

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그

www.acmicpc.net


그리디 문제

1. N이 우선 5로 나누어 떨어지는 경우 바로 출력

2. 그 외에는 N-3을 해주며 봉지 개수를 늘려주고 다시 N-3한 값이 5로 나누어 떨어지는지 확인

#include <bits/stdc++.h>
using namespace std;

int n;
 
int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  int result = 0;
  
  while(1){
    if(n%5 == 0){
      result += n/5;
      cout<<result<<"\n";
      break;
    }
    else{
      n -=3;
      if(n<0){
        cout<<-1<<"\n";
        break;
      }
      else{
        result++;
      }
    }
  }
}

 

 

 

 

'Algorithm > BOJ' 카테고리의 다른 글

[c++] 백준 1026 보물  (0) 2021.01.15
[c++] 백준 1920 수 찾기  (0) 2021.01.15
[c++] 백준 6359 만취한 상범  (0) 2021.01.14
[c++] 백준 1929 소수 구하기  (0) 2021.01.12
[c++] 백준 1978 소수 찾기  (0) 2021.01.12

https://www.acmicpc.net/problem/6359

 

6359번: 만취한 상범

한 줄에 한 개씩 각 테스트 케이스의 답, 즉 몇 명이 탈출할 수 있는지를 출력한다.

www.acmicpc.net


어제 한 에라토스테네스 의 체 방법에 영감을 받아서  2부터 시작하여 배수에 해당하는 값들을 방문하며

열려있으면 (0) -> (1) 닫아주고 , 닫혀 있으면 (1) -> (0) 열어주는 방식으로 구현하였다.

 

a[1] 경우에는 처음 열어줄 때 빼고는 더이상 방문하지 않기 때문에 시작을 2로 두었고,

마지막에 열려있는 (0) 개수를 세어 출력 

 

#include <bits/stdc++.h>
using namespace std;


int a[101];
int t;
 
int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>t;
  
  while(t--){
    int n;
    cin>>n;

    for(int i= 1; i<=n; i++){
      a[i] = 0; 
    }

    for(int i=1; i<=n; i++){
      for(int j=i*2; j<=n; j+=i){
        if(a[j] == 0) a[j] =1;
        else a[j] = 0;
      }
    }

    int cnt = 0;
    for(int i = 1; i<=n; i++){
      if(a[i]==0) cnt++;
    }
    cout<<cnt<<"\n";   
  }
 
}

'Algorithm > BOJ' 카테고리의 다른 글

[c++] 백준 1920 수 찾기  (0) 2021.01.15
[c++] 백준 2839 설탕 배달  (0) 2021.01.14
[c++] 백준 1929 소수 구하기  (0) 2021.01.12
[c++] 백준 1978 소수 찾기  (0) 2021.01.12
[c++] 백준 2501 약수 구하기  (0) 2021.01.12

https://www.acmicpc.net/problem/1929

 

1929번: 소수 구하기

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

www.acmicpc.net


2가지 방법으로 풀어 보았다.

1.  1978 소수 찾기 문제에서 사용한 소수 판별 함수를 활용 ,  for문으로 n이상 m이하의 수를 넣어서

소수인 경우에만 벡터에 넣고 , 벡터의 요소들을 출력

 

2. 에라토스테네스의 체 방법을 이용 

 

[1번 방법]

#include <bits/stdc++.h>
using namespace std;

int n,m;
vector<int> vec;

bool func(int n){
  if(n==1) return false;
  for(int i=2; i*i <=n; i++){
    if(n%i ==0) return false;
  }
  return true;
}


int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n>>m;
  for(int i=n; i<=m; i++){
    if(func(i)) vec.push_back(i);
  }

  for(auto&i:vec){
    cout<<i<<'\n';
  }
  
}

 

[2번 방법]

#include <bits/stdc++.h>
using namespace std;

int n,m;
int d[1000001];

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n>>m;

  for(int i=2; i<=m; i++){
    d[i] = 1;    
  }

  for(int i= 2; i*i <=m; i++){
      for(int j = i*i; j<=m; j+=i){
        if(d[j] == 0) continue;
        else d[j] = 0;
    }
  }

  for(int i=n; i<=m; i++){
    if(d[i]!=0) cout<<i<<"\n";
  }

}


'Algorithm > BOJ' 카테고리의 다른 글

[c++] 백준 2839 설탕 배달  (0) 2021.01.14
[c++] 백준 6359 만취한 상범  (0) 2021.01.14
[c++] 백준 1978 소수 찾기  (0) 2021.01.12
[c++] 백준 2501 약수 구하기  (0) 2021.01.12
[c++] 백준 2012 등수 매기기  (0) 2021.01.11

https://www.acmicpc.net/problem/1978

 

1978번: 소수 찾기

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

www.acmicpc.net


입력 되는 숫자가 소수인지 아닌지 판별하고 소수일 경우 개수 증가 

#include <bits/stdc++.h>
using namespace std;

int n;
vector<int> vec;

bool func(int n){
  if(n==1) return false;
  for(int i=2; i*i <=n; i++){
    if(n%i ==0) return false;
  }
  return true;
}


int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    int num;
    cin>>num;
    vec.push_back(num);
  }
  int cnt =0;
  for(auto&i : vec){
    if(func(i)) cnt++; 
  }

  cout<<cnt;

}

'Algorithm > BOJ' 카테고리의 다른 글

[c++] 백준 6359 만취한 상범  (0) 2021.01.14
[c++] 백준 1929 소수 구하기  (0) 2021.01.12
[c++] 백준 2501 약수 구하기  (0) 2021.01.12
[c++] 백준 2012 등수 매기기  (0) 2021.01.11
[c++] 백준 2812 크게 만들기  (0) 2021.01.11

www.acmicpc.net/problem/2501

 

2501번: 약수 구하기

첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.

www.acmicpc.net


1부터 N까지의 수 중에 N을 나눴을 때의 나머지가 0인 약수를 구하는 방법 대신

N이 제곱수 일때의 약수의 중복을 피할 수 있는 좋은 코드를 보게 되어서 

코드를 활용하여 문제를 풀었담  

약수끼리의 곱이 N이 되도록 짝을 짓는 방식을 활용 ! 

진짜 똑똑한 사람들 많은듯,, ㅇ<-<

#include <bits/stdc++.h>
using namespace std;

void divisor(int n,int k){
  vector<int> ret;
  for(int i=1; i*i <=n; i++){
    if(n%i ==0) ret.push_back(i);
  }
  for(int i= ret.size()-1; i>=0 ; i--){
    if(ret[i]*ret[i]==n) continue;
    ret.push_back(n/ret[i]);
  }
  
  if(ret.size()<k){
    cout<<0;
  }
  else{
  cout<<ret[k-1]<<"\n";
  }
}

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n,k;
  cin>>n>>k;
  divisor(n,k);
}

'Algorithm > BOJ' 카테고리의 다른 글

[c++] 백준 1929 소수 구하기  (0) 2021.01.12
[c++] 백준 1978 소수 찾기  (0) 2021.01.12
[c++] 백준 2012 등수 매기기  (0) 2021.01.11
[c++] 백준 2812 크게 만들기  (0) 2021.01.11
[c++] 백준 2437 저울  (0) 2021.01.11

https://www.acmicpc.net/problem/2012

 

2012번: 등수 매기기

첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다.

www.acmicpc.net


오늘은 머리가 잘 안돌아 가는 기분,,

 

문제 접근 :  불만도 총합 최소를 구해야 하기 때문에, 되도록이면 높은 등수를 예상한 사람에게 높은 실제 등수를 매겨서 불만도를 최소화 할 수 있도록 구성

 

1. 입력 된 예상 등수 정렬

2. 정렬된 순서대로 1 ~ n 까지의 등수  부여

      /  실제 등수와 예상등수 차이의 절대값을 누적하여 더한다

 

포인트는 불만도 합을 long long type으로 설정하기.

 

#include <bits/stdc++.h>
using namespace std;

int n;
vector<int> vec;


int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    int num;
    cin>>num;
    vec.push_back(num);
  }

  sort(vec.begin(),vec.end());
  long long sum =0;
  
  for(int i = 1; i<=n; i++){
    sum += abs(vec[i-1]-i);
    
  }

  cout<<sum<<"\n";

}

'Algorithm > BOJ' 카테고리의 다른 글

[c++] 백준 1978 소수 찾기  (0) 2021.01.12
[c++] 백준 2501 약수 구하기  (0) 2021.01.12
[c++] 백준 2812 크게 만들기  (0) 2021.01.11
[c++] 백준 2437 저울  (0) 2021.01.11
[c++] 백준 1541 잃어버린 괄호  (0) 2021.01.08

https://www.acmicpc.net/problem/2812

 

2812번: 크게 만들기

N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

www.acmicpc.net


ex) 1924 입력시

처음 1을 읽어옴  벡터에 넣음 -> 다음 9를 읽어올 때 while문 조건에 충족 ,  1을 빼고 9를 넣음

-> 2를 읽어옴 while문 조건 충족 x 벡터에 넣음 -> 4를 읽어옴 조건 충족 4보다 작은 2를 빼고 4를 넣음

 

#include <bits/stdc++.h>
using namespace std;

int n,k;
string str;
vector<char> vec;


int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n>>k>>str;
  for(int i=0; i<str.length(); i++){
    while(k && !vec.empty() && vec.back() <str[i] ){
      vec.pop_back();
      k--;
    }
    vec.push_back(str[i]);
  }
  for(int i=0; i<vec.size()-k; i++){
    cout<<vec[i];
  }

}

 

'Algorithm > BOJ' 카테고리의 다른 글

[c++] 백준 2501 약수 구하기  (0) 2021.01.12
[c++] 백준 2012 등수 매기기  (0) 2021.01.11
[c++] 백준 2437 저울  (0) 2021.01.11
[c++] 백준 1541 잃어버린 괄호  (0) 2021.01.08
[c++] 백준 1946 신입사원  (0) 2021.01.08

https://www.acmicpc.net/problem/2437

 

2437번: 저울

하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓

www.acmicpc.net

 

오늘도 그리디 

#include <bits/stdc++.h>
using namespace std;

int n;
int d[1001];

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n;
  for(int i=0; i<n; i++){
    cin>>d[i];
  }
  int target = 0;
  sort(d,d+n);
  for(int i=0; i<n; i++){
    if(d[i]>target) break;
    target += d[i];
  }

  cout<<target+1<<'\n';
  
}

'Algorithm > BOJ' 카테고리의 다른 글

[c++] 백준 2012 등수 매기기  (0) 2021.01.11
[c++] 백준 2812 크게 만들기  (0) 2021.01.11
[c++] 백준 1541 잃어버린 괄호  (0) 2021.01.08
[c++] 백준 1946 신입사원  (0) 2021.01.08
[c++] 백준 1931 회의실 배정  (0) 2021.01.07

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net


stoi 는 최고의 기능,, ㅇ<-<

#include <bits/stdc++.h>
using namespace std;

string s;

int main(void){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>s;
  int sum = 0;
  string temp =" ";
  bool minus = false;
  for(int i=0; i<=s.size(); i++){
      if(s[i] == '-' || s[i] == '+' || s[i]== '\0'){
       if(minus){
            sum -= stoi(temp);
        }
        else{
            sum += stoi(temp);
        }
        temp ="";
         if(s[i] == '-'){
            minus = true;
        }
        continue;
      }
      temp +=s[i];
  }
  cout<< sum; 
}

'Algorithm > BOJ' 카테고리의 다른 글

[c++] 백준 2812 크게 만들기  (0) 2021.01.11
[c++] 백준 2437 저울  (0) 2021.01.11
[c++] 백준 1946 신입사원  (0) 2021.01.08
[c++] 백준 1931 회의실 배정  (0) 2021.01.07
[c++] 백준 11047 동전 0  (0) 2021.01.07

+ Recent posts