알고리즘 공부/기타 C 언어 알고리즘

NYPC 2023 Round 1: 3번문제

티들 2023. 10. 22. 00:02

메이플스토리 새로운 직업 고르기

NYPC 2023 · Round 1
 

메이플스토리에는 여러 가지 모험가 직업들이 있다.

메이플스토리의 팬인 당신은 여러 모험가 캐릭터를 키워봤다. 이제 안 해본 모험가 캐릭터를 키워보려고 한다. 메이플스토리에 존재하는 모든 모험가 직업과, 당신이 키워본 모험가 직업이 주어졌을 때 당신이 새로 키워볼 수 있는 모험가 직업을 모두 나열하는 프로그램을 작성하시오.

입력 형식

첫 줄에 메이플스토리에 존재하는 모든 모험가 직업의 수 이 주어진다. ()

이어지는  개의 줄에는 모험가 직업이 주어진다. 모험가 직업은 영어 알파벳만으로 이루어진 길이 1 이상 15 이하인 문자열이다. 같은 모험가 직업이 두 번 이상 나오는 경우는 없다. 대문자와 소문자는 구별된다. 예를 들면, hero와 Hero는 다른 직업이다.

그다음 줄에 당신이 키워본 모험가 직업의 수 가 주어진다. ()

이어지는  개의 줄에는 당신이 키워본 모험가 직업이 주어진다. 당신이 키워본 모험가 직업은 메이플스토리에 존재하는 모든 모험가 직업 중 한 가지이며, 다른 캐릭터로 같은 모험가 직업을 택할 수 있으므로 같은 모험가 직업이 두 번 이상 나올 수 있다.

출력 형식

첫 줄에 당신이 새로 키워볼 수 있는 모험가 직업의 수 를 출력한다.

이어지는  개의 줄에 새로 키울 수 있는 모험가 직업을 출력한다. 출력 순서는 중요하지 않다.

예제 1

입력

2 Hero Paladin 1 Hero

출력

1 Paladin

예제 2

입력

2 Hero Paladin 2 Paladin Hero

출력

0

예제 3

입력

3 Hero Paladin DarkKnight 3 Hero Hero Hero

출력

2 DarkKnight Paladin

예제 설명

예제 1에서, 2 가지 직업 Hero와 Paladin이 존재하고 당신은 Hero만 키워봤다. 따라서 당신이 새로 키워볼 수 있는 직업은 Paladin 하나다.

예제 2에서, 2 가지 직업 Hero와 Paladin이 존재하고 당신은 Hero와 Paladin을 모두 키워봤다. 따라서 당신이 새로 키워볼 수 있는 직업은 없다.

예제 3에서, 3 가지 직업 Hero, Paladin, DarkKnight가 존재하고 당신은 Hero만 세 번 키워봤다. 따라서 당신이 새로 키워볼 수 있는 직업은 DarkKnight와 Paladin 둘이다. 이 둘의 순서가 바뀌어도 정답임에 유의하라.

 

나의 코드

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

int i, j;
int N, K, T, a=0, b=0, j1[150];	// 변수 선언
char job1[150][20], job2[150][20];	// 직업 변수선언 

int main()
{
    scanf("%d", &N);	// N 입력
    for (i=0;i<N;i++)	// N만큼 있는 직업 입력
    {
        scanf("%s", job1[i]);
    }
    scanf("%d", &K);	// K 입력
    for (i=0;i<K;i++)	// K만큼 키울 직업 입력
    {
        scanf("%s", job2[i]);
    }

    for (i=0;i<N;i++)
    {
        for (j=0;j<K;j++)
        {
        	// 같은 직업인지 비교
            if (strcmp(job1[i], job2[j]) == 0)	
            {
                a = 1;
                break;
            }
        }
        if (!a)	// 아니라면
        {
            j1[b] = i;
            T++;	// 갯수 증가
            b++;	// 반복할만큼 증가
        }
        a = 0;	// 초기화
    }
    printf("%d\n", T);	// 새로 키울수 있는 직업수 출력

    for(i=0;i<b;i++)	// 새로 키울 직업만 출력 
    {
        printf("%s\n", job1[j1[i]]);
    }

    return 0;
}

 

문제 바로가기:https://nypc.github.io/2023/round1_1