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

재찬·2023년 1월 6일
0

Algorithm

목록 보기
11/64
post-thumbnail

문제

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

문제가 길어 링크와 간단한 스샷으로 대체하겠습니다.

코드

오답 코드

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

int main(){
	vector<string> dogam;
	vector<string> quiz;
	int n, m;
	int p;
	int res;
	string pokemon;
	string q;
	string str;
	
	cin >> n >> m;
	
	for(int i =1; i <= n; i++){
		cin >> pokemon;
		dogam.push_back(pokemon);
	}
	
	for(int i = 0; i < m; i++){
		cin >> q;
		quiz.push_back(q);
	}
	
	for(int i = 0; i <m; i++){
		str = quiz[i];
		
		if(str[0] >= 'A' && str[0] <= 'Z'){
			p = find(dogam.begin(), dogam.end(), str) - dogam.begin();
			p++;
			cout << p;	
		}	
		
		else{
			res = stoi(quiz[i]);
			cout << dogam[res];
		}
		cout << '\n';
	}
	return 0;
}

정답 코드

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

int n, m, res;
string s;
map<int, string> dogam;
map<string, int> rdogam;

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	cin >> n >> m;
	
	for(int i = 0; i < n; i++){
		cin >> s;
		rdogam[s] = i+1;
		dogam[i+1] = s;
	}
	
	for(int i = 0; i < m; i++){
		cin >> s;
		
		if(atoi(s.c_str()) == 0){
			cout << rdogam[s] <<'\n';
		}

		else{
			cout << dogam[atoi(s.c_str())] <<'\n';
		}
	}
}

풀이

오답 분석

  • 저번 문제부터 습관 아닌 습관이 있는게 배열을 조금 쓸데없이 사용하는 느낌이 있다.
  • 오답 코드를 보면 퀴즈에 대한 배열을 만들어서 사용하는데 나중에 보니 메모리 낭비인듯한 느낌이 들었다.
  • 오답 코드인 이유 중 하나는 뭔가 비슷한 값을 출력하지만 index가 하나씩 차이났다.
  • vector에 push_back을 하다보니 index가 0부터 시작하는데 이러면 size로 계산할 경우 1의 차이가 날 수 밖에 없다는 생각이 들었다.
  • stoi에 대한 이해 부족, 이번 문제는 입력 값이 string 형이긴 하지만 숫잔데 문자열로 들어오는지 진짜 문자열인지를 구분할 수 있는게 관건이라 생각한다.
    string s = "123" 일 때 stoi(s) 의 결과 값은 int형 123인데
    string s = "abc" 일 때 stoi(s) 의 결과 값은 오류가 떠서 확인이 안됐다.
    이거 무슨 오륜지 찾아야 하는데 쉽지가 않다...
    이번 문제에선 stoi를 사용하기 힘들다고 판단하였고 기존 함수인 atoi를 사용하겠다는 생각이 들었다.
    atoi는 문자로 구성된 문자열일 경우 0을 반환하기 때문이였다.

정답 풀이

  • 오답대로 index를 맞춘 후 실행했을 때 시간 초과가 발생했기 때문에 애초에 숫자로 검색할 수 있는 도감, 이름으로 검색할 수 있는 도감 2개를 전부 만들기로 결정했다.
  • atoi를 사용해서 입력 값이 문자로 구성된거면 문자로 검색하도록, 숫자로 구성된 문자열이면 숫자로 변경 후 숫자로 검색하도록 구현하였다.
  • 자꾸 시간초과 오류가 발생해서 cin, cout.tie를 사용했다.

결과

후기

자꾸 구현 아이디어가 떠오르고 설계한다고 하는데 막상 처음 쓴 코드는 굉장히 복잡하고 비합리적이다.
몇 번 계속 바꿔줘야 좀 봐줄만한 코드가 나오는거 같다...
좀 더 합리적으로 생각해서 코드를 짜려고 노력해봐야겠다.

0개의 댓글