백준 1620 나는야 포켓몬 마스터 이다솜(C++)

REASON·2022년 9월 25일
0

알고리즘

목록 보기
13/20

백준 1620 나는야 포켓몬 마스터 이다솜

제출 코드 (시간초과)

이중 for문 쓰면 시간 초과 날 것 같은데..라고 생각은 하고 있었지만 거의 다 왔는데 다른 방법이 생각이 안나서 일단 제출!!! 하고 보자는 생각으로 제출했다.
물론 결과는 당연하게도 시간초과 ㅋㅋㅋ
c++에서 key 값으로 출력하는 방법을 몰라서 구글링해서 배워왔는데 어차피 통과 못하는 코드였던 것..

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

int N, M;
map<int, string> mp;
string find_pm, pm;

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

	cin >> N >> M;
	for(int i = 0; i < N; i++){
		cin >> pm;
		mp[i] = pm;
	}
	
	for(int i = 0; i < M; i++){
		cin >> find_pm;
		
		if( atoi(find_pm.c_str()) == 0 ){ // 문자로 들어옴. 
		// 숫자로 변경해서 출력 
			for(auto it = mp.begin(); it != mp.end(); it++){
				if( it -> second == find_pm ){
					cout << (it->first) + 1  << "\n";
					break;
				}
			}
			
		} else { // 숫자로 들어옴, 문자로 변경해서 출력 
			int idx = atoi(find_pm.c_str());
			cout << mp[idx - 1]  << "\n"; 
		}
	}
	
	return 0;
}

일단 전체적인 로직은 다 짰기 때문에 시간초과 부분만 해결하면 될 것 같아서 솔루션을 찾아봤다.
전체 코드는 안 보고 변수 선언부분만 봤는데 애초에 map을 2번 쓰면 해결될 문제였다는 것을 알게 되었다. (왜 이거 생각 못했지..?)
그래서 해당 부분만 수정해서 바로 제출했다.

리트라이! 성공한 코드

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

int N, M;
map<int, string> mp;
map<string, int> mp2; // 1개 더 만듦..
string find_pm, pm;

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

	cin >> N >> M;
	for(int i = 0; i < N; i++){
		cin >> pm;
		mp[i] = pm;
		mp2[pm] = i;
	}
	
	for(int i = 0; i < M; i++){
		cin >> find_pm;
		
		if( atoi(find_pm.c_str()) == 0 ){ // 문자로 들어옴. 
		// 숫자로 변경해서 출력 
			cout << mp2[find_pm] + 1<< "\n";
			
		} else { // 숫자로 들어옴, 문자로 변경해서 출력 
			int idx = atoi(find_pm.c_str());
			cout << mp[idx - 1]  << "\n"; 
		}
	}
	
	return 0;
}

진짜 맨 처음에는 배열로 작성했다가 아무리 생각해도 key : value로 가야될 것 같아서 map으로 했다가 다시 배열로 바꿨다가 ㅋㅋㅋ 갈팡질팡 하다가 결국 map이 맞는 것 같아서 map으로 시도했는데 시간초과를 맛보고 솔루션 코드의 전역 변수 선언 부분에 map 2개 선언한거 보고 깨달아 성공한 문제.

굉장히 간단한 문제였다.

  • int, string을 사용하는 map의 경우 배열로 사용할 수도 있다.

0개의 댓글