[백준] 17219번 비밀번호 찾기

반응형
반응형

문제

2019 HEPC - MAVEN League의 "비밀번호 만들기"와 같은 방식으로 비밀번호를 만든 경민이는 한 가지 문제점을 발견하였다. 비밀번호가 랜덤으로 만들어져서 기억을 못 한다는 것이었다! 그래서 경민이는 메모장에 사이트의 주소와 비밀번호를 저장해두기로 했다. 하지만 컴맹인 경민이는 메모장에서 찾기 기능을 활용하지 못하고 직접 눈으로 사이트의 주소와 비밀번호를 찾았다. 메모장에 저장된 사이트의 수가 늘어나면서 경민이는 비밀번호를 찾는 일에 시간을 너무 많이 쓰게 되었다. 이를 딱하게 여긴 문석이는 경민이를 위해 메모장에서 비밀번호를 찾는 프로그램을 만들기로 결심하였다! 문석이를 도와 경민이의 메모장에서 비밀번호를 찾아주는 프로그램을 만들어보자.

입력

첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다.

두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번호가 공백으로 구분되어 주어진다. 사이트 주소는 알파벳 소문자, 알파벳 대문자, 대시('-'), 마침표('.')로 이루어져 있고, 중복되지 않는다. 비밀번호는 알파벳 대문자로만 이루어져 있다. 모두 길이는 최대 20자이다.

N+2번째 줄부터 M개의 줄에 걸쳐 비밀번호를 찾으려는 사이트 주소가 한줄에 하나씩 입력된다. 이때, 반드시 이미 저장된 사이트 주소가 입력된다.

출력

첫 번째 줄부터 M개의 줄에 걸쳐 비밀번호를 찾으려는 사이트 주소의 비밀번호를 차례대로 각 줄에 하나씩 출력한다.

 

이럴 수가...

map만 사용하면 되네...

이 문제로 map을 왜 사용하는지 알 것 같다.

엄청 빨리 찾아지네..ㄷㄷ

 

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

int n,m;  
map<string,string> p;

int main(void) {    
  ios_base::sync_with_stdio(false); 
  cin.tie(NULL);

  cin >> n >> m;

  for(int i = 0; i<n;i++) {
    string url,pass;
    cin >> url >> pass;
    p[url] = pass;
  }

  while(m--) {
    string url;
    cin >> url;
   cout << p[url] << '\n';
  }
  
  
}
 

나는 이 문제를 pair를 이용해서 풀려고 했다.

하지만 그렇게 풀면 시간 초과가 뜬다.

그래서 많은 고민끝에 map을 사용했다. map이라는게 key와 value값으로 저장할 수 있다는 건 알 고 있었는데..

이런식으로 key값으로 value값을 빨리 찾을 수 있는지 몰랐다.

엄청 빨리 찾아진다.

이게 해시로 값을 찾는거 같다.

 

이로써 하나 배웠다.

 

또 이문제의 접근을..

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

int n,m; string input1, input2;
vector <pair<string, string> > list;

int search(int l, int r, string a){
    int mid = (l+r)/2; 
    if(list[mid].first==a) return mid;
    
    return list[mid].first>=a ? search(l,mid,a) : search(mid+1,r,a);
   
}

 

이런식으로 이분 탐색으로 풀 수 있다고 한다.

나는 계속 string값만 생각하고 있었는데... 굳이 그럴 필요가 없었다..ㅎㅎ

반응형

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

[백준] 2512번 예산  (0) 2020.06.17
[백준] 11729번 하노이 탑 이동 순서  (0) 2020.06.16
[백준] 2503번 숫자 야구  (0) 2020.06.12
[백준] 1202번 보석 도둑  (0) 2020.06.11
[백준] 2012번 등수 매기기  (0) 2020.06.11

댓글

Designed by JB FACTORY