레야몬

1620번 나는야 포켓몬 마스터 이다솜 - 해시 본문

알고리즘/백준

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

Leyamon 2022. 8. 23. 19:16

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct _poke {
    int n[50000];  //포켓몬 번호
    int num;  //개수
} poke[27][27];


int f(char a)  //소문자를 대문자로 바꿔줌
{
    return a>='a' ? a-20-'A':a-'A';
}

int main()
{
    int N, M;
    int i, j, k;
    char name[100000][21]={};
    char s[21];
    
    scanf("%d %d", &N, &M);
    
    for(i=1; i<=N; i++) {
        scanf("%s", name[i]);  //포켓몬 이름 받기
        
        poke[f(name[i][0])][f(name[i][1])].n[poke[f(name[i][0])][f(name[i][1])].num++]=i;
    }  //앞에 두 글자로 나누기
    
    for(i=0; i<M; i++) {
        scanf("%s", s);
        if(s[0]>='A') {  //문자열임
            for(j=0; j<poke[f(s[0])][f(s[1])].num; j++) {
                if(!strcmp(name[poke[f(s[0])][f(s[1])].n[j]], s)) {
                    printf("%d\n", poke[f(s[0])][f(s[1])].n[j]);
                    break;
                }
            }
        }
        else
            printf("%s\n", name[atoi(s)]);
    }
    
    return 0;
}

 

atoi(list): list 문자열을 정수로 반환하고, 숫자가 아닐 경우 0을 반환한다. <stdlib.h>

strcmp(s1, s2): 문자열 s1이 문자열 s2보다 크면 1, 작으면 0, 같으면 0을 반환한다. <string.h>

100000만번을 판단해야했기 때문에 strcmp로 일일이 판단하는 것은 무리라고 판단.

앞에 두 글자만 선택해서 이차원 배열에 나눠서 저장했다. 다 풀고 나서 다른 사람 코드를 보는데 해시로 푸는 사람도 있었다.

 

처음보는 알고리즘이라서 블로그에서 공부했다. 링크는 아래에

 

<strcmp()>

https://dojang.io/mod/page/view.php?id=346 

 

C 언어 코딩 도장: 41.2 문자열 비교하기

strcmp 함수를 사용하면 두 문자열이 같은지 비교할 수 있으며 함수 이름은 문자열을 비교하다(string compare)에서 따왔습니다(string.h 헤더 파일에 선언되어 있습니다). strcmp(문자열1, 문자열2); int strc

dojang.io

 

<atoi()>

https://dojang.io/mod/page/view.php?id=385 

 

C 언어 코딩 도장: 46.1 문자열을 정수로 변환하기

46 문자열과 숫자를 서로 변환하기 프로그램을 만들다 보면 내용은 숫자이지만 형태는 문자열인 경우를 자주 만나게 됩니다. 예를 들면 다음과 같이 텍스트 파일에 문자와 숫자가 섞인 상태로

dojang.io

 

<구조체>

https://dojang.io/mod/page/view.php?id=408 

 

C 언어 코딩 도장: 48.1 구조체를 만들고 사용하기

구조체는 struct 키워드로 정의합니다. struct 구조체이름 { 자료형 멤버이름; }; 구조체는 정의만 해서는 사용을 할 수가 없습니다. 따라서 구조체도 변수로 선언해서 사용합니다. struct 구조체이름

dojang.io

 

<자료구조 - 해시>

https://go-coding.tistory.com/30

 

[자료구조] Hash의 개념 및 설명

코딩테스트 문제를 풀다가 막히는 문제가 있었다. 내가 지금까지 배운 여러가지 자료구조를 생각해보았지만 딱히 올바른게 떠ㅎ오르지 않아서 힌트를 보았다. 힌트를 보니 '이분 탐색, 해시를

go-coding.tistory.com

 

내가 봤던 코드. 솔직히 보고 감탄했다. (한 번 풀어야 볼 수 있습니다.)

https://www.acmicpc.net/source/38626243

 

로그인

 

www.acmicpc.net

 

 

※현재 고등학교 등교중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다.

 

Comments