문제 링크 

 

주소와 비밀번호 쌍을 입력받는다. 

주소를 통해 비밀번호를 찾는 것이고, 주소는 중복되지 않는다.  map의 키는 중복되지 않으니까 map으로 구현했다. 

 

"맞았습니다" 코드 링크  

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

int n, m;
string address, password;
map<string, string> smap;

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

  cin >> n >> m;
  while(n--){
    cin >> address >> password;
    smap.insert({address, password});
  }
  while(m--){
    cin >> address;
    cout << smap[address] << '\n';
  }

  return 0;
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

집합 백준 11723번 c++  (0) 2022.02.19
바이러스 백준 2602번 c++  (0) 2022.02.19
저작권 백준 2914번 c++  (0) 2022.02.17
민균이의 비밀번호 백준 9933번 c++  (0) 2022.02.17
막대기 백준 1094번 c++  (0) 2022.02.17
 
평균을 구할 때 반드시 ‘올림'을 하라는 것이 힌트였다. 
32.1 , 32.8이 나와도 출력을 33으로 해야 한다. 
따라서 (평균값 - 1 ) 에서 곡 개수를 곱한 다음, 다시 +1 해준다. 
 
#include <bits/stdc++.h>
using namespace std;

double total_count, avg_value; // 수록곡 개수, 평균값

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

  cin >> total_count >> avg_value;
  cout << (avg_value - 1) * total_count + 1;

  return 0;
}
 
 
 
728x90

'알고리즘 > 백준' 카테고리의 다른 글

바이러스 백준 2602번 c++  (0) 2022.02.19
비밀번호 찾기 백준 17219번 c++  (0) 2022.02.17
민균이의 비밀번호 백준 9933번 c++  (0) 2022.02.17
막대기 백준 1094번 c++  (0) 2022.02.17
수들의 합 백준 1789번 c++  (0) 2022.02.16
 
팰린드롬 문자인지, 문자열을 뒤집은 문자를 포함하는지를 확인해야 한다. 
“문자열을 뒤집은 문자를 포함하는지” 확인하면, 자기 자신이 팰린드롬일 때 이 조건을 이미 만족한다. 
 
#include <bits/stdc++.h>
using namespace std;

int n;
string st, answer;

int mmmmmain(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> n;

  vector<string> v(n);
  for(int i = 0; i < n; i++){
    cin >> v[i];
  }
  for(int i = 0; i < n; i++){
    st = v[i];
    reverse(st.begin(), st.end());
    if( st == *find(v.begin(), v.end(), st)) {
      answer = st; break;
    }
  }
  int asize = answer.size();
  cout << asize << ' ' << answer[asize/2];
  return 0;
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

비밀번호 찾기 백준 17219번 c++  (0) 2022.02.17
저작권 백준 2914번 c++  (0) 2022.02.17
막대기 백준 1094번 c++  (0) 2022.02.17
수들의 합 백준 1789번 c++  (0) 2022.02.16
좌표 압축 백준 18870번 c++  (0) 2022.02.16

문제 링크 

 

64센티 막대를 반으로 계속 나누게 된다. 

2로 나누면 한 조각이  64 -> 32 ->  16 -> 8 -> 4 -> 2 -> 1  로 쪼개진다. 

 

이 중에 사용할 조각이 있고, 아닌 조각이 있을 것이다.

 

x 센티를 만들기 위해 64센티를 이진수로 바꾸면된다. 

쪼개진 막대를 사용 할지, 말지 선택하는 것과 같다. 

 

 

"맞았습니다" 코드 링크 

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

int x, cnt;
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  cin >> x;
  while(x >= 1){
    if(x % 2 == 1) cnt++;
    x /= 2;
  }
  cout << cnt;
  return 0;
}
728x90

'알고리즘 > 백준' 카테고리의 다른 글

저작권 백준 2914번 c++  (0) 2022.02.17
민균이의 비밀번호 백준 9933번 c++  (0) 2022.02.17
수들의 합 백준 1789번 c++  (0) 2022.02.16
좌표 압축 백준 18870번 c++  (0) 2022.02.16
수 정렬하기 2 백준 2751번 c++  (0) 2022.02.16
 
합 S가 주어진다. 
합 S가 나오는 서로 다른 ‘최대 개수' N을 찾아야 한다. 서로 다른 수를 더하되 최대 개수니까 1부터 차례로 더한다. 
처음에는 1 더하고. 다음에는 2 더하고. .... 이런 식이다. 
만약 특정 숫자를 더했을 때 s를 초과한다면, 그 직전 개수가 답이 된다. 
 
#include <bits/stdc++.h>
using namespace std;

long long s;

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

  cin >> s;

  int num = 1; // 더할 수
  int cnt = 0; // 더한 수의 개수
  long long sum = 0; // 누적 합

  while(1){
    sum += num;
    cnt++;
    if(sum > s){
      cnt--;
      break;
    }
    num++;
  }
  cout << cnt;
  return 0;
}
 
728x90
해당 값의 인덱스 위치를 출력하는 find() 함수를 썼을 때 시간초과가 났다. 
find() 함수는 순차탐색 하니까 시간복잡도가 O(N) 이다. 
이미 정렬된 곳에서 탐색하는 거니까 이진 탐색으로 구현된 lower_bound() 를 쓰니까 시간초과가 나지 않았다. 
 

시간복잡도를 비교해보자. 

 
find() O(N)
sort  O(N logN)
 

이진 탐색으로 구현된 lower_bound(), upper_bound()

 lower_bound()  O(log N)
처음 n값이 나오는 위치 반환 
 
upper_bound()  O(log N)
처음으로 n값을 초과하는 위치 반환 
“맞았습니다" 코드 링크
#include <bits/stdc++.h>
using namespace std;

int n, num;
vector<int> v;
vector<int> temp;

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

  cin >> n;
  for(int i = 0; i <n; i++) {
    cin >> num;
    v.push_back(num); temp.push_back(num);
  }
  sort(v.begin(), v.end()); // [-10, -9, 2, 4, 4]
  v.erase(unique(v.begin(), v.end()), v.end()); // [-10, -9, 2, 4]

  for(auto x : temp){
    cout << lower_bound(v.begin(), v.end(), x) - v.begin() << ' ';
  }

  return 0;
}
 
 
728x90

'알고리즘 > 백준' 카테고리의 다른 글

막대기 백준 1094번 c++  (0) 2022.02.17
수들의 합 백준 1789번 c++  (0) 2022.02.16
수 정렬하기 2 백준 2751번 c++  (0) 2022.02.16
마인크래프트 백준 18111번 c++  (0) 2022.02.14
방 번호 백준 1475번 c++  (0) 2022.02.14
 
100만 이하의 정수를 입력받으니까 양수와 음수 모두 포함이다. 
숫자는 중복되지 않는다. 
수열을 입력 받을 때, 인덱스에 해당하는 숫자가 있다/없다만 1값을 주면서 표시한다. 
음수가 들어올 수 있으니까, 모든 수에 100만을 더한다. 
출력할때는 값이 1인 것만 출력하되, 인덱스에서 100만을 빼면 원래 입력받은 수를 출력할 수 있다. 
 
 
#include "bits/stdc++.h"
using namespace std;

int n, num;
int arr[2000002];

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

  cin >> n;
  while(n--){
    cin >> num;
    num += 1000000;
    arr[num]++;
  }
  for(int i = 0; i < 2000002; i++){
    if(arr[i] == 1) {
      cout << i-1000000 << '\n';
    }
  }
  return 0;
}
 
728x90

'알고리즘 > 백준' 카테고리의 다른 글

수들의 합 백준 1789번 c++  (0) 2022.02.16
좌표 압축 백준 18870번 c++  (0) 2022.02.16
마인크래프트 백준 18111번 c++  (0) 2022.02.14
방 번호 백준 1475번 c++  (0) 2022.02.14
영화감독 숌 백준 1436번 c++  (0) 2022.02.14

+ Recent posts