[BOJ] 1159번: 농구 경기

HyeRyun·2020년 6월 24일
0

Baekjoon Online Judge

목록 보기
1/30
post-thumbnail

✔️ 문제

상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작했다. 상근이도 농구장을 청소하면서 감독이 되기 위해 가져야할 능력을 공부해나갔다. 서당개 3년이면 풍월을 읊듯이 상근이는 점점 감독으로 한 걸음 다가가고 있었다. 어느 날 그에게 지방의 한 프로농구팀을 감독할 기회가 생기게 되었다. 그는 엄청난 지도력을 보여주며 프로 리그에서 우승을 했고, 이제 국가대표팀의 감독이 되었다.

내일은 일본과 국가대표 친선 경기가 있는 날이다. 상근이는 내일 경기에 나설 선발 명단을 작성해야 한다.

국가대표팀의 감독이 된 이후에 상근이는 매우 게을러졌다. 그는 선수의 이름을 기억하지 못하고, 각 선수의 능력도 알지 못한다. 따라서, 누가 선발인지 기억하기 쉽게 하기 위해 성의 첫 글자가 같은 선수 5명을 선발하려고 한다. 만약, 성의 첫 글자가 같은 선수가 5명보다 적다면, 상근이는 내일 있을 친선 경기를 기권하려고 한다.

상근이는 내일 경기를 위해 뽑을 수 있는 성의 첫 글자를 모두 구해보려고 한다.

  • 입력
    첫째 줄에 선수의 수 N (1 ≤ N ≤ 150)이 주어진다. 다음 N개 줄에는 각 선수의 성이 주어진다. (성은 알파벳 소문자로만 이루어져 있고, 최대 30글자이다)

  • 출력
    상근이가 선수 다섯 명을 선발할 수 없는 경우에는 "PREDAJA" (따옴표 없이)를 출력한다. PREDAJA는 크로아티아어로 항복을 의미한다. 선발할 수 있는 경우에는 가능한 성의 첫 글자를 사전순으로 공백없이 모두 출력한다.

😎 소스 코드

// Baekjoon no.1159 농구 경기

#include <iostream>
#include <vector>
#include <string>
using namespace std;

const int TOT_ALPHABET = 26;
int alphabet[TOT_ALPHABET] = {0}; // ASCII code 97:a, 122:z

string getResult(int num){
  string answer;
  
  // 선수 5명 선발
  for (int i = 0; i < TOT_ALPHABET; i++){
    if (alphabet[i] > 4){
      char convert = (char)i + 97;
      answer += convert;
    }
  }
  
  // 선발할 수 있는 선수가 없음
  if (answer.length() == 0){
    cout << "PREDAJA" << endl;
  }
  
  cout << answer << endl;
  return answer;
}

void searchName(vector<string> name, int num){
  for (int j = 0; j < num; j++){
    int position = name[j].at(0) - 97;
    alphabet[position]++; // 해당하는 성의 첫 글자 카운트를 증가시킴
  }
}

int main (){
  int input;
  cout << "input a number" << endl;
  cin >> input;
  
  vector<string> list;
  string name;
  
  // get and push names to a vector
  for (int i = 0; i < input; i++){
    cin >> name;
    list.push_back(name);
  }
  
  searchName(list, input);
  getResult(input);
  
  return 0;
}

✊ 문제를 풀고 나서

프로그래머스가 짜증나서 다시 백준으로 돌아왔다. 백준이 문제가 엄청 많고 단계별로 풀 수 있어서 좋은데 한 가지 단점은 자바스크립트로 입력 받기가 어렵다는 점이다. 자바스크립트로 작성하는게 더 편한데 ㅠㅠ

메인 함수 내에서 두 가지 함수로 분리했는데,
1. searchName(): 선수들의 이름이 담겨있는 벡터 list에서 맨 첫 글자 알파벳만 보고 해당 알파벳의 배열에 카운트를 해준다. 아스키코드를 이용했음.
2. getResult(): 위에서 수행한 알파벳 배열에서 값이 4 초과인 인덱스에 97을 더해준다(아스키코드 때문에). 그 후 answer에 더해준다.

무난무난하게 푼 문제였다.

profile
개발개발

0개의 댓글