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

문제

“ There's a starman waiting in the sky
He'd like to come and meet us
But he thinks he'd blow our minds 
There's a starman waiting in the sky
He's told us not to blow it
Cause he knows it's all worthwhile “

David Bowie - Starman, 1972

2016년은 Coder's High 온사이트가 2년 만에 돌아온 경사스러운 해이기도 하지만, 전설적인 락 스타 David Bowie가 지병인 암으로 사망한 슬픈 년도이기도 하다.

재현이는 데이빗 보위를 기리기 위해서, RDBMS(Rockstar David Bowie Memorial System) 라는 프로그램을 구상하였다. RDBMS는 SQL(Starman Query Language)라는 언어를 통해서 작동한다. SQL은 상당히 간단한 언어로, 다음과 같은 질의에 대해서 응답한다.

  • S E -> S년 1월 1일 이후, E 12월 31일 이전 발매된 데이빗 보위의 앨범을 출력한다. 앨범을 출력할 때는, "발매연도 앨범 이름" (따옴표 없이) 의 형식으로 출력하라. 출력은 발매일 순으로 진행해야 하며, 앨범은 새 줄로 구분한다. (1 ≤ S  E ≤ 2016)

재현이를 도와서, SQL의 질의에 응답하는 프로그램을 만들어라. 문제 설명에 주어지지 않은 정보로 생기는 문제를 없애기 위해, 예제 2는 모든 가능한 데이빗 보위의 앨범을 포함한, 올바른 출력을 보여준다. 예제 2의 데이터를 바탕으로 출력하라.

 

 

입력

첫 번째 줄에 질의의 수 정수 Q(Q ≤ 100)가 주어진다.


이후 Q개의 줄에 질의 S, E(1 ≤ S ≤ E ≤ 2016)가 정수로 주어진다.

 

 

출력

각 질의에 대해서 다음 정보를 출력한다 :

  • 첫 번째 줄에는, 질의를 만족하는 데이빗 보위의 앨범 수 S를 출력한다.
  • 이후 S개의 줄에 데이빗 보위의 앨범 이름을 새 줄로 구분하여 주어진 순서대로 출력한다. 앨범의 이름을 출력할 때, 띄어쓰기, 대소문자 등이 출제자의 코드와 다르게 출력되면 안된다. 출력은 예제에 나온 이름과 정확히 일치해야 한다.

각각의 질의마다 새 줄로 구분할 필요는 없다. 예제 입출력을 참고하라.

 

 

예제 입력 1

 3

 1973 1973

 1977 1979

 2014 2015

 

예제 출력 1

 2

 1973 AladdinSane

 1973 PinUps

 3

 1977 Low

 1977 Heroes

 1979 Lodger

 0

 

 

예제 입력 2

 1

 1 2016

 

예제 출력 2

 25

 1967 DavidBowie

 1969 SpaceOddity

 1970 TheManWhoSoldTheWorld

 1971 HunkyDory

 1972 TheRiseAndFallOfZiggyStardustAndTheSpidersFromMars

 1973 AladdinSane

 1973 PinUps

 1974 DiamondDogs

 1975 YoungAmericans

 1976 StationToStation

 1977 Low

 1977 Heroes

 1979 Lodger

 1980 ScaryMonstersAndSuperCreeps

 1983 LetsDance

 1984 Tonight

 1987 NeverLetMeDown

 1993 BlackTieWhiteNoise

 1995 1.Outside

 1997 Earthling

 1999 Hours

 2002 Heathen

 2003 Reality

 2013 TheNextDay

 2016 BlackStar

 

 

출처

Contest > Coder's High > Coder's high 2016 Round 1: Online B번

· 문제를 번역한 사람: 문제를 만든 사람: koosaga

 

 

알고리즘 분류

· 구현

 

 

코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <vector>
using namespace std;
 
#define N 26
#define L 2018
 
int main() {
    int num[N] = { 1967196919701971197219731973197419751976197719771979198019831984198719931995199719992002200320132016 };
    string name[N] = { "DavidBowie""SpaceOddity""TheManWhoSoldTheWorld""HunkyDory""TheRiseAndFallOfZiggyStardustAndTheSpidersFromMars""AladdinSane""PinUps""DiamondDogs""YoungAmericans""StationToStation""Low""Heroes""Lodger""ScaryMonstersAndSuperCreeps""LetsDance""Tonight""NeverLetMeDown""BlackTieWhiteNoise""1.Outside""Earthling""Hours""Heathen""Reality""TheNextDay""BlackStar" };
    int cnt, size, Q, S[L], E[L];
    vector <int> index;
    
    // Input
    cin >> Q;
    for (int i = 0; i < Q; i++) {
        cin >> S[i] >> E[i];
    }
    
    // Output
    for (int i = 0; i < Q; i++) {
        cnt = 0;
        for (int j = 0; j < N; j++) {
            if ((num[j] >= S[i]) && (num[j] <= E[i])) {
                cnt++;
                index.push_back(j);
            }
        }
        cout << cnt << endl;
        size = index.size();
        for (int k = 0; k < size; k++) {
            cout << num[index.at(k)] << " " << name[index.at(k)] << endl;
        }
        index.clear();
    }
    
    return 0;
}






배열과 벡터를 조합하여 이 문제를 풀었다.

이 문제를 풀면서 배열과 벡터의 인덱스와 해당 인덱스의 위치에 들어 있는 요소들을 다룰 수 있는 능력을 기를 수 있었다.


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

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

[BOJ10707][C++] 수도요금  (0) 2018.10.03
[BOJ5597][C++] 과제 안 내신 분..?  (0) 2018.10.02
[BOJ5543][C++] 상근날드  (0) 2018.10.01
[BOJ2490][C++] 윷놀이  (0) 2018.10.01
[BOJ7567][C++] 그릇  (0) 2018.09.29
[BOJ7568][C++] 덩치  (0) 2018.09.29
[BOJ1978][C++] 소수 찾기  (0) 2018.09.15
[BOJ12400][C++] Google語스  (0) 2018.09.08
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️


📖 Contents 📖