음유시인 영재

문제링크: https://www.acmicpc.net/problem/19948

 

19948번: 음유시인 영재

감수성이 뛰어난 음유시인 영재는 일상생활 중에 번뜩 시상이 떠오르곤 한다. 하지만 기억력이 좋지 못한 영재는 시상이 떠오르면 그 순간 컴퓨터로 기록해야만 안 까먹는다! 시는 대문자, 소

www.acmicpc.net

대문자 A와 소문자 a의 아스키 코드값은 각각 65, 97이다.

 

먼저 문자열을 입력받고, 스페이스 포함 각 문자를 칠 수 있는 횟수를 입력을 받는다.
이를 배열로 만들어준다.

 

그리고 문자열을 하나씩 떼어 읽으면서 사용된 문자를 구분하여 해당 배열의 수를 줄여나간다.
CharToInt가 그 역할을 해준다.
문자가 들어오면 0~26의 index로 반환해준다.

 

만일 이 배열 중 하나라도 음수 값이 된다면 이 시의 내용과 제목은 타이핑이 불가능한 것이다.
따라서 flag를 세워 음수값이 되었을 경우 false를 주어 마지막 출력에 구분한다.

CharToInt메소드를 통해

  • 정답코드
    #include<iostream>
    #include<string>
    using namespace std;
    
    int CharToInt(char c) {
    	int charN = c;
    	if (charN == 32)
    		return 0;
    	else if (charN < 92)
    		return charN - 64;
    	else
    		return charN - 96;
    }
    char CharToIni(char c) {
    	if (c > 92)
    		return c - 32;
    	else
    		return c;
    }
    
    int main() {
    	string str;
    	getline(cin, str);
    
    	int alpha[27];
    	for (int i = 0; i < 27; i++)
    		cin >> alpha[i];
    	
    	char pre = ' ';
    	bool flag = true;
    	string title = "";
    	for (int i = 0; i < str.size(); i++) {
    		char cur = str.at(i);
    		if (pre != cur) {
    			int idx = CharToInt(cur);
    			alpha[idx]--;
    			if (alpha[idx] < 0) {
    				flag = false;
    			}
    		}
    
    		if (pre == ' ')
    			if (cur != ' ')
    				title.push_back(CharToIni(cur));
    		pre = cur;
    	}
    
    	pre = ' ';
    	for (int i = 0; i < title.size(); i++) {
    		char cur = title.at(i);
    		if (pre != cur) {
    			int idx = CharToInt(cur);
    			alpha[idx]--;
    			if (alpha[idx] < 0) {
    				flag = false;
    			}
    		}
    		pre = cur;
    	}
    
    	if (flag)
    		cout << title << endl;
    	else
    		cout << -1 << endl;
    	return 0;
    }

 

'ProblemSolving' 카테고리의 다른 글

[BOJ] 1106_호텔  (1) 2021.01.28
[BOJ] 1149_RGB거리  (0) 2021.01.27
[BOJ] 1931_회의실 배정  (0) 2021.01.25
[BOJ] 1012_유기농 배추  (0) 2021.01.24
[BOJ] 1105_팔  (0) 2021.01.23
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기