별의 공부 블로그 🧑🏻‍💻
728x90
728x170

문제

드높은 남산 위에 우뚝 선

송백은 흰 눈빛에 푸르고

옛부터 흘러가는 한가람

장 할 손 우리 학원 이룩한

굳세고 다함 없는 거룩한 뜻이

백이십년 빛난 역사 자랑이로세

비바람 몰아쳐도 나가자

공들여 쌓은 탑은 빛난다

울려라 삼천리에 힘차게

세워라 반석 위에

선린의터를

 

선린인터넷고등학교 학생들은 이미 잘 알고 있겠지만, 학교 교가를 부를 때는 마지막 5글자인 "선린의터를" 부분만 크고 우렁차게 불러야 한다.

정휘는 여기에 영감을 받아, 문자열이 주어지면 마지막 5글자만 우렁차게 읽으려고 한다. 공백이 없는 문자열이 주어지면 마지막 5글자만 출력하는 프로그램을 작성해보자.

 

입력

첫 번째 줄에 문자열의 길이 N이 주어진다.

두 번째 줄에는 N글자로 이루어진 문자열 S가 주어진다.

 

출력

S의 마지막 5글자를 출력한다.

 

제한

5≤N≤100000

문자열 S는 알파벳 대문자, 알파벳 소문자, 쉼표(,), 마침표(.)로만 구성되어 있다. 쉼표와 마침표도 각각 한 글자로 센다.

 

예제 입력 1

 12
 Sunrin,Hair.

 

예제 출력 1

 Hair.

 

힌트

알파벳 대문자, 알파벳 소문자, 쉼표, 마침표의 아스키 코드는 각각 65-90, 97-122, 44, 46이다.

 

출처

High School > 선린인터넷고등학교 > 제5회 천하제일 코딩대회 예선 A번

  • 문제를 만든 사람: jhnah917
  • 문제를 검수한 사람: junie, leejseo

 

알고리즘 분류

  • 문자열

 


코드

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;

#define NUM 5

int main() {
    int N, size = 0, cnt = 0;
    char *S;
    
    cin >> N;
    
    S = (char*)malloc(sizeof(char) * N);
    
    cin >> S;
    
    for (int i = 0; i < N; i++) {
        if ((S[i] >= 44) && (S[i] <= 122)) {
            if ((S[i] == 44) || (S[i] == 46)) cnt++;
            if ((S[i] >= 65) && (S[i] <= 90)) cnt++;
            if ((S[i] >= 97) && (S[i] <= 122)) cnt++;
        }
        
        if (cnt > N - NUM) {
            cout << S[i];
        }
    }
    
    free(S);
    
    return 0;
}

 

원래는 문자열을 입력 받고, 문자열의 맨 마지막 5글자를 출력하도록 코드를 짜서 제출하였으나 틀려 버렸다.

아무래도 문제의 제한에 명시된 알파벳 대문자, 알파벳 소문자, 쉼표(,), 마침표(.) 가 포함되어 있지 않는 테스트 케이스가 있는 듯 했다.

(문자열 맨 마지막의 NULL 문자도 고려해야 하기 때문에, 맨 마지막 5글자 + 1글자(NULL 문자) 를 출력하도록 하면 이 문제를 쉽게 해결할 수 있다.)

 

그래서 문제의 조건에 맞게 간단하게 아스키 코드를 이용하여 문제를 해결하였다.

for 문을 돌려서 문자안에 알파벳 대문자, 알파벳 소문자, 쉼표, 마침표가 있을 경우 카운트를 하였고, 그 수가 문자열 전체 크기 - 5(NUM) 보다 클 경우 한 문자씩 출력하도록 하였다.

728x90
그리드형(광고전용)

'Problem Solving > BaekJoon Online Judge' 카테고리의 다른 글

[BOJ1152][C++] 단어의 개수  (0) 2022.07.11
[BOJ2480][C++] 주사위 세개  (0) 2022.06.15
[BOJ2525][C++] 오븐 시계  (0) 2022.06.15
[BOJ2164][C++] 카드2  (0) 2021.10.30
[BOJ5618][C++] 공약수  (0) 2021.04.13
[BOJ2455][C++] 지능형 기차  (0) 2021.02.08
[BOJ10757][C++] 큰 수 A + B  (0) 2021.02.05
[BOJ15596][C++] 정수 N개의 합  (0) 2021.02.04
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖