반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

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

백준(Baekjoon) 문제

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

huiung 2019. 1. 13. 20:50
반응형

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

문제와 채점은 위 사이트에서 확인 하실 수 있습니다.

 

이 문제는 처음에 string 배열에 각 포켓몬 이름을 입력받고 stringstream을 통해 숫자가 나온 경우엔 포켓몬 이름을 출력하고

그렇지 않은경우엔 입력받은 스트링과 스트링 배열을 비교해서 출력 하는식으로 풀었는데 계속 시간초과가 나서 조금 애를 먹었습니다.

처음에는 cout, endl이 시간을 많이 잡아 먹는다고 하여서 printf, scanf로 바꾸었고, 또한 문자가 입력된 경우 스트링 배열 처음부터 비교하는 for문이 있었는데 map을 이용하면 아예 비교를 할 필요가 없다는걸 알았습니다.

 

아래는 코드입니다.

 

#include <stdio.h>
#include <string>
#include <sstream>
#include <map>

using namespace std;

int main(void) {
	int N,M; // N은 포켓몬 개수 M은 문제의 개수 
	scanf("%d %d",&N, &M);
	
	map<string, int> m;
	
	if(N<1 || M<1 || N>100000 || M>100000)
		return 0;
	
	string s[N]; //string 배열 선언 
	
	for(int i = 0; i < N; i++) { //각 포켓몬 입력 받기
		char arr[20]; 
		scanf("%s", arr);
		s[i] = arr;
		m.insert(make_pair(s[i], i));
	}
	
	while(M) {
		int x;
		string input;
		char arr[20];
		scanf("%s", arr);
		input = arr;
		stringstream ss(input); //정수를 읽어 들이기 위해 stringstream 생성 
		if (ss>>x) { //입력받은 문자가 숫자이면 포켓몬 이름 출력
			if(x<1)
				return 0; 
			printf("%s\n", s[x-1].c_str());
			}
		else {
			printf("%d\n", m[input]+1);
		}
		M--;		
	}
	return 0;
}
반응형

'백준(Baekjoon) 문제' 카테고리의 다른 글

백준 2910 빈도 정렬  (0) 2019.01.14
백준 7785 회사에 있는 사람  (0) 2019.01.13
백준 1966 프린터 큐  (0) 2019.01.13
백준 1918 후위표기식  (1) 2019.01.13
백준 9012 괄호  (0) 2019.01.12