https://www.acmicpc.net/problem/9046
제출 코드
#include <iostream>
#include <string>
using namespace std;
int main()
{
int t, max;
bool miss = false;
string str;
int count[26] = { 0, };
cin >> t;
cin.ignore();
for (int i = 0; i < t; i++)
{
getline(cin, str);
int len = str.length();
for (int j = 0; j < len; j++)
{
if (str[j] != ' ')
count[str[j] - 'a']++;
}
max = 0;
for (int k = 1; k < 26; k++)
{
if (count[k] > count[max])
{
max = k;
miss = false;
}
else if (count[k] == count[max])
{
miss = true;
}
}
if (miss)
cout << '?' << endl;
else
cout << (char)(max + 'a') << endl;
fill_n(count, 26, 0);
miss = false;
}
}
* fill_n(배열, 초기화하려는 구간, 초기화할 값) 함수로 한 번 선언했던 배열을 초기화
그 외 방법들
- 단순히 for문으로 초기화하기
- memset(배열, 초기화할 값, 초기화할 구간) 함수 이용 (단, -1, 0과 char 타입으로만 초기화가 가능하다)
- fill(첫 포인터, 마지막 포인터, 초기화할 값) 함수 이용
* fill 함수는 사실상 내부적으로 for문을 돌리는 것과 비슷하게 동작하기 때문에 속도는 memset 함수가 훨씬 빠르다
c++에서 cin은 공백을 단위로 문장을 잘라버려서 엔터를 기준으로 입력받으려면 getline 함수를 사용해야 한다.
그런데 cin과 getline을 혼용하여 사용하게 되면 개행문자가 남아있어 \n이 바로 입력되는 문제가 생기기 때문에 cin.ignore 함수를 사용해 앞에 있는 문자를 하나 지워줘야 한다(버퍼를 지우는 개념이 아님, 기본값이 1이고 인자로 더 큰 숫자를 주면 더 뒤쪽까지 무시한다)
'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글
[C++] 입출력 속도 줄이기(시간초과 해결법) (1) | 2025.01.01 |
---|---|
[C++][백준 4659] 비밀번호 발음하기 (0) | 2024.12.31 |
[C++][백준 1157] 단어 공부 (1) | 2024.12.31 |
[C++][백준 10798] 세로읽기 (0) | 2024.12.31 |
[C++][백준 11720] 숫자의 합 (0) | 2024.12.31 |