2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

강의자료/정보영재

정보올림피아드 2017년 전국대회 본선 문제 초등 1번 딱지문제 풀이

원당컴퓨터학원 2017. 8. 22. 16:30

알고리즘을 하는 학생들이라면 정보올림피아드에 출전하여 전국대회에서 수상하는 것은 참으로 큰 의미있는 대회라고 생각 하고 있습니다.(정보올림피아드 준비 해 준 모든 학생들에게 고생했다는 이야기를 먼저 해 주고 싶습니다.^^)


저희 원에서도 올해 도전한 학생들이 있었는데 아쉽게 시도대회 장려로 끝난 사례가 있어서...

정말로 전국대회의 벽은 높고도 높다는 생각을 많이 하게 된 계기가 되었는데요...

중학생인 경우는 1년 준비해서 전국대회 가는 것이 많이 버겁구나 하는 것을 느끼기도 했구요...

또한 제가 많이 부족하구나 하는것도 깨닫게 되었네요.


그래도 내년에는 중3 학생들이 졸업을 하니까...

그리고 또 일년간 더 쌓아온 내공이 있으니까...

내년에는 꼭 전국대회 갈수 있을거라 생각을 하고 있답니다.


오늘은 지난 7월 20일에 전국대회를 치른 문제중에서 가장 기본이 되는 초등1번문제 딱지놀이 문제를 풀어 보았습니다.


문제는 http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=2377&sca=60&s1=&s2=&s3=&s4= 

정올 사이트를 참고해 주시면 좋겠습니다.


문제 요약을 하면 다음과 같습니다.


 

● 만약 두 딱지의 별의 개수가 다르다면, 별이 많은 쪽의 딱지가 이긴다.
● 별의 개수가 같고 동그라미의 개수가 다르다면, 동그라미가 많은 쪽의 딱지가 이긴다.
● 별, 동그라미의 개수가 각각 같고 네모의 개수가 다르다면, 네모가 많은 쪽의 딱지가 이긴다.
● 별, 동그라미, 네모의 개수가 각각 같고 세모의 개수가 다르다면, 세모가 많은 쪽의 딱지가 이긴다.
● 별, 동그라미, 네모, 세모의 개수가 각각 모두 같다면 무승부이다.


별, 동그라미, 네모, 세모를 각각 숫자 4, 3, 2, 1로 표현한다. 


 [Copy]
5
1 4 
4 3 3 2 1
5 2 4 3 2 1 
4 4 3 3 1
4 3 2 1 1 
4 2 3 2 1
4 4 3 2 1
3 4 3 2
5 4 4 2 3 1
5 4 2 4 1 3
 [Copy]
A
B
B
A
D



입력 예에서 5 개의 데이터를 입력 받고 있구요...

A는 1개 그림만 나왔는데 1개 그림이 4(별) 이라는 얘기구요.

B는 4개 그림이 나왔는데 3(동그라미),3(동그라미),2(네모),1(세모) 의 그림이 나왔다는 얘기 입니다.


이렇게 쌍이 5개로 나누어져서 출력 예제는 5개가 나오는 것입니다.


문제는 다음과 같이 풀어 보았습니다.



/**************************************************************
    Problem: 3072
    User: icon001
    Language: C++
    Result: Success
    Time:19 ms
    Memory:1740 kb
****************************************************************/
 
 
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
int main()
{
    int n;
    //freopen("input.txt","r",stdin);
    scanf("%d",&n);
 
    for(int i = 0;i<n;i++)
    {
        int an,bn,temp;
        int aImage[5]={0,}; //a그림 갯수
        int bImage[5]={0,}; //b그림 갯수
        scanf("%d",&an);//a의 갯수를 입력 받자.
        for(int j=0;j<an;j++)
        {
            scanf("%d",&temp);
            aImage[temp]++; //그림 갯수를 입력 하자
        }
        scanf("%d",&bn);//a의 갯수를 입력 받자.
        for(int j=0;j<bn;j++)
        {
            scanf("%d",&temp);
            bImage[temp]++; //그림 갯수를 입력 하자
        }
 
        int flag=0;
        for(int j=4;j>0;j--) //4점짜리 별부터 체크 하면서 같으면 그 다음 체크 다르면 이긴 사람 출력
        {
            if(aImage[j]==bImage[j]) continue; //같으면 다음 체크
            if(aImage[j]>bImage[j])
            {
                flag=1;
                printf("A\n");
                break;
            } else
            {
                flag=1;
                printf("B\n");
                break;
            }
        }
        if(flag==0) //무승부이다.
        {
            printf("D\n");
        }
 
    }
    return 0;
}

 



A 그림의 번호를 입력 받으면서 aImage[그림번호] 위치를 카운터 증가 했구요.

B 그림의 번호를 입력 받으면서 bImage[그림번호] 위치를 카운터 증가 했습니다.


그리고 4번째 그림부터 앞으로 나오면서 나온 갯수를 비교해서.

4번째 그림이 많은 것을 승자 같으면 3번째 꺼 비교... 이런식으로 비교했습니다.


가장 기본적인 알고리즘에 속하는 문제 유형이었습니다.


정보올림피아드 문제 풀이 리스트 정리




사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기