본문 바로가기
코드업(codeup)/C

[코드업(codeup)/C]코드업(codeup) 3170 : 기억력 테스트 9 C언어

by starfish22 2022. 1. 10.
728x90

▶문제 : 기억력 테스트 9 (codeup.kr)

 

기억력 테스트 9

첫째 줄에 $N$과 $M$이 입력된다.($1<=N, M<=100,000$) 둘째 줄부터 $N$줄 동안 문자열 $S$와 정수 $k$가 입력된다.  그 다음 $M$줄 동안 질문 $Q$가 문자열로 입력된다. 만약 부르지 않았던 단어를 질문하는

codeup.kr

 

▶코드 작성

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

char word[100000][101];
int num[100000];
int printNum[100000];

int main()
{
    int n, m, temp, count = 0;
    char str[101];

    scanf("%d %d", &n, &m);

    for (int i = 0; i < n; i++)
    {
        scanf("%s %d", str, &temp);//str와 temp으로 일단 입력받음
        for (int j = 0; j < count; j++)//count는 겹치지 않은 문자들의 수
        {
            if (strcmp(word[j], str) == 0)//word배열에 str와 같은 문자가 있으면
            {
                num[j] += temp;//숫자만 더해줌
                temp = -1;
                break;
            }
        }
        if (temp != -1)//word배열에 str와 같은 문자가 없었을 때
        {
            strcpy(word[count], str);//word배열에 str문자 추가
            num[count++] = temp;//숫자 추가해주고 count++
        }
    }

    for (int i = 0; i < m; i++)
    {
        scanf("%s", str);
        for (int j = 0; j < count; j++)
        {
            if (strcmp(word[j], str) == 0)//word배열에 str문자가 있으면
            {
                printNum[i] = num[j];//출력해줄 배열에 숫자 대입
                str[0] = '\0';
                break;
            }
        }
        if (str[0] != '\0') printNum[i] = 0;//word배열에 str문자가 없으면 0 대입
    }

    for (int i = 0; i < m; i++)
    {
        printf("%d\n", printNum[i]);
    }

    return 0;
}

 

▶해석

str와 temp으로 먼저 문자와 숫자를 입력받아서 모든 문자를 저장하는 word배열에서 str문자가 있는지 확인한 후 있으면 num배열에 숫자만 더해준다. str문자가 없으면 word배열에 복사하여 추가해준다. 질문하는 문자들 또한 str로 입력받아 word배열에 있으면 num배열에서 알맞은 수를 printNum배열에 저장한다. printNum배열은 질문한 문자들의 순서에 맞게 출력해줄 것이다. str문자가 없으면 printNum배열에 0을 대입해준다.

728x90

댓글