본문 바로가기

# 프로그래밍 개발/04. 알고리즘 문제풀이

백준 알고리즘 10769번 행복한지 슬픈지 문제 풀이 코드 공개

반응형

문제

승엽이는 자신의 감정을 표현하기 위해서 종종 문자 메시지에 이모티콘을 넣어 보내곤 한다. 승엽이가 보내는 이모티콘은 세 개의 문자가 붙어있는 구조로 이루어져 있으며, 행복한 얼굴을 나타내는 :-) 와 슬픈 얼굴을 나타내는 :-( 가 있다.

혜성이는 승엽이의 이모티콘을 귀여운 척이라고 생각해 매우 싫어하므로, 승엽이의 문자가 오면 전체적인 분위기만 판단해서 알려주는 프로그램을 작성하고 싶다.

입력

첫 줄에 최소 1개에서 최대 255개의 문자들이 입력된다.

출력

출력은 다음 규칙에 따라 정해진다.

  • 어떤 이모티콘도 포함되어 있지 않으면, none 을 출력한다.
  • 행복한 이모티콘과 슬픈 이모티콘의 수가 동일하게 포함되어 있으면, unsure 를 출력한다.
  • 행복한 이모티콘이 슬픈 이모티콘보다 많이 포함되어 있으면, happy 를 출력한다.
  • 슬픈 이모티콘이 행복한 이모티콘보다 많이 포함되어 있으면, sad 를 출력한다.

출처

Olympiad > Canadian Computing Competition & Olympiad > 2015 > CCC 2015 Junior Division 2번

알고리즘 분류

 

흐음.. 왜 이렇게 많이 틀렸을까...? 

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

int main(){
	char a[256];
	gets(a);
	char stack[256];
	int len = strlen(a);
	int h = -1, s = -1;
	int top = 0;
	for(int i = 0 ; i < len ; i++){
		if(top == 0){
			if(a[i] == ':')
				stack[top++] = a[i];
		}
		if(top == 1){
			if(strncmp(stack,":",1)!=0)
				top = 0;
			else if(a[i] == '-')
				stack[top++] = a[i];
		}
		if(top == 2){
			if(strncmp(stack,":-",2)!=0)
				top = 0;
			else if(a[i] == ')' || a[i] == '(')
				stack[top++] = a[i];
		}

		if(top == 3){
			if(strncmp(stack,":-)",3)==0){
				h++;
				top  = 0;
			}
			else if(strncmp(stack,":-(",3)==0){
				s++;
				top = 0;
			}else
				top = 0;
		}
	}
	if(h == -1 && s == -1)
		printf("none\n");
	else if(h > s){
		printf("happy\n");
	}
	else if(h < s){
		printf("sad\n");
	}
	else if(h == s)
		printf("unsure\n");
}

조건이 쪼끔 까다로웠던 모양이다. 

5년만에 C언어를 보니.. 왜이렇게 새로운지 모르겠다. 

strncmp() 라든지 gets()라든지.. 잊고 있었던 오래된 친구를 보는 듯한 기분이랄까.. 

옛날에는 자주 썼는데

현업에서는 Unity 를 쓰고 있는 내가 저 함수들을 쓰는 일은 거의 없는 것 같다. 

반응형