Post List

[BOJ] 백준 1159 농구 경기

[BOJ] 백준 1159 농구 경기



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


이 문제는 test case만큼 문자를 입력받아 같은 첫번째 문자가 5개 이상 되면 출력하는 문제입니다.
문자를 입력받을때 첫 문자가 랜덤하게 들어옵니다. 이것을 Count 하기 쉽게 하려면
사전순으로 정렬하는 Sort() 함수를 사용하면 됩니다.




소스코드 :



#include 
// sort() 를 사용하기 위한 STL.
#include 
using namespace std;

int main()
{
 int t;
 char ch[30];
 cin >> t;
 char *p = new char[t];

 // 문자(이름)을 입력 받은 후 첫번째 문자만 p에 저장.
 for (int i = 0; i < t; i++) {
  cin >> ch;
  p[i] = ch[0];
 }

 // 저장된 p들을 사전순으로 정렬.( k b a -> a b k)
 sort(p, p + t);

 char check = p[0];

 // cnt 배열 동적 메모리 할당시 {} 안하면 쓰레기값 들어감.
 char *cnt = new char[t] {};
 int num = 1;
 int idx = 0;

 // 같은 문자의 개수를 세는 루프
 for (int i = 1; i < t; i++) {

  // 같은문자라면 num++;
  if (check == p[i]) {
   num++;
  }

  // 다른문자가 나왔다면 num을 1로 바꿔주고, check도 새로운 다른문자로 교체.
  else {
   num = 1;
   check = p[i];
  }

  // num이 5가 되었다면, cnt배열에 저장.
  if (num == 5) {
   cnt[idx++] = check;
  }
 }

 // 5개 이상인 문자가 하나도 없을때 false, 하나라도 있으면 true 인 flag 선언.
 bool flag = false;
 for (int i = 0; i < t; i++) {

  // cnt 의 값이 존재한다면 출력.
  if (cnt[i]) {
   cout << cnt[i];
   flag = true;
  }
 }

 // 5개이상 문자가 없을때 항복 출력.
 if (!flag) cout << "PREDAJA";
 cout << endl;

 delete[]p;
 delete[]cnt;
}

댓글