[BaekJoon 1157][๐ค1] ๋จ์ด ๊ณต๋ถ
โ ๋ฌธ์
๐ฏ ๋์ด๋
Bronze ๐ค1
๐ง ํ์ด
1. ๋ด ํ์ด (๊ตฌํ)
- ์๊ณ ๋ฆฌ์ฆ
Implementation,string
- ์ค๋ช
๋ฌธ์์ด์ ํ์ฉํ ๊ตฌํ ํ์ด์ด๋ค.
๋ฌธ์์ด์ ์
๋ ฅ ๋ฐ๊ณ ๊ฐ ๋ฌธ์๋ค์ ์ํํ๋ฉด์, ๋์๋ฌธ์์ ์๊ด์์ด ๋น๋์๋ฅผ ๊ฐฑ์ ํด๊ฐ๋ฉฐ '์ต๋น๋'์ธ ์ํ๋ฒณ์ ๋๋ฌธ์๋ก ์ถ๋ ฅํ๋๋ก ๋ก์ง์ ๊ตฌํํ๋ค.
๋์๋ฌธ์์ ์๊ด์์ด ์ธ์ํ๋๋ก toupper ํจ์๋ก ๋ชจ๋ ๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๋ณํํ์ผ๋ฉฐ, ์ด์ ๋ฐ๋ณต๋ฌธ์์ ๊ตฌํ iMax (์ต๋น๋)๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ์ต๋น๋ ์ํ๋ฒณ์ด ์์ผ๋ฉด ?๋ฅผ ์ถ๋ ฅ, ์๋๋ผ๋ฉด ํด๋น ์ํ๋ฒณ์ ์ถ๋ ฅํ๋๋ก ํ๋ค.
sort๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ max_element ๋ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง, ๋์๊ฒ ์ด ํ์ด๊ฐ ๊ฐ์ฅ ํจ์จ์ ์ด๋ผ๊ณ ํ๋จ๋์๋ค.
์ฒ์ O(N) ๋ฐ๋ณต๋ฌธ์ ์ ์ธํ toupper์ O(1), ๋ ๋ฒ์งธ ๋ฐ๋ณต๋ฌธ ๋ํ ์์ ์๊ฐ์ผ๋ก O(1)์ด๋ฏ๋ก, ์ ์ฒด์ ์ธ ์๊ฐ ๋ณต์ก๋๋ O(N)์ด๋ค.
- ์ฝ๋
๋ด ํ์ด ์ฝ๋
#include <iostream>
#include <string>
#include <cctype>
#include <algorithm>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
string strInput{};
cin >> strInput;
int arrAlphabet[26]{}; // ๊ฐ ์ํ๋ฒณ ๊ฐ์ ๋ฐฐ์ด
int iMax{}; // ์ต๋น๋ ๋ณ์
for(char chInput : strInput)
{
// ํ์ฌ ๋ฌธ์๋๋ฌธ์๋ก ๋ณํ
chInput = static_cast<unsigned char>(toupper(chInput));
int iInput{ static_cast<int>(chInput - 'A') };
// ํด๋น ์ํ๋ฒณ์ ๋น๋ ์ฆ๊ฐ, ์ต๋น๋ ๋ณ์ ๊ฐฑ์
++arrAlphabet[iInput];
iMax = max(iMax, arrAlphabet[iInput]);
}
int iIndex{ -1 }; // ์ต๋น๋ ์ํ๋ฒณ์ ์ธ๋ฑ์ค ๋ณ์
for(int i = 0; i < 26; ++i)
{
// ์ต๋น๋์ ๊ฐ์ ๋น๋๋ฅผ ๊ฐ์ง ์ํ๋ฒณ์ธ ๊ฒฝ์ฐ
if(arrAlphabet[i] == iMax)
{
// ์ด๋ฏธ ์ด์ ์ ์ต๋น๋๊ฐ ๋์จ ๊ฒฝ์ฐ
if(iIndex != -1)
{
cout << '?';
return 0;
}
// ์ธ๋ฑ์ค ๊ฐฑ์
iIndex = i;
}
}
// ๋๋ฌธ์๋ก ์ถ๋ ฅ
cout << static_cast<char>(iIndex + 'A');
return 0;
}
๐ญ ํ๊ธฐ
๋ฌธ์์ด์ ๋์๋ฌธ์ ํ๋ณ, ์ต๋น๋ ๋ฐ ์ค๋ณต ์์์ ํ๋ณ ๋ฑ์ ๋ก์ง์ ์ฝํ
๋ฅผ ํ๋ฉด์ ์ ๋ง ๋ง์ด ๋์ค๊ณ , ์ตํ๋๋ฉด ์์ฃผ ์ข์ผ๋ฏ๋ก ์ฌ์ด ๋์ด๋์ ๋ฌธ์ ๋ผ๋ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
Comments