-
[Algorithm] ๋ฐฑ์ค 1157 ๋จ์ด ๊ณต๋ถ (Swift/C++)Algorithm 2022. 1. 31. 02:04
1157๋ฒ: ๋จ์ด ๊ณต๋ถ
์ํ๋ฒณ ๋์๋ฌธ์๋ก ๋ ๋จ์ด๊ฐ ์ฃผ์ด์ง๋ฉด, ์ด ๋จ์ด์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ ์ํ๋ฒณ์ด ๋ฌด์์ธ์ง ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋๋ฌธ์์ ์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋๋ค.
www.acmicpc.net

์๊ณ ๋ฆฌ์ฆ ๋ถ๋ฅ
- ๊ตฌํ
- ๋ฌธ์์ด
๋ฌธ์ ํ์ด
๋จผ์ ๋ฌธ์๋ฅผ ์ ๋ ฅ ๋ฐ๊ณ , ์ํ๋ฒณ์ ์ซ์๋ฅผ ์ ๋ฐฐ์ด alphabet์ ์์ฑํ๋ค. alphabet ๋ฐฐ์ด๋ค์ ์์๋ ๋ชจ๋ 0์ผ๋ก ์ด๊ธฐํํด์ค๋ค.

๋ฌธ์ ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ ๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ์ถ๋ ฅํ๋ผ๊ณ ํ๊ธฐ ๋๋ฌธ์, for ๋ฌธ์ ๋๋ฉด์, word์ ๋ฌธ์ ์ค ์๋ฌธ์์ธ ๊ฒ์ด ์๋ค๋ฉด 32๋ฅผ ๋นผ์ ๋๋ฌธ์๋ก ๋ฐ๊ฟ์ค๋ค.
alphabet ๋ฐฐ์ด์ 0๋ฒ์งธ ์ธ๋ฑ์ค๋ A๊ฐ ๋์จ ํ์, 1๋ฒ์งธ ์ธ๋ฑ์ค๋ B๊ฐ ๋์จ ํ์, .. 25๋ฒ์งธ ์ธ๋ฑ์ค๋ Z๊ฐ ๋์จ ํ์๊ฐ ๋๋ค.
๋ฐ๋ผ์ ์์คํค์ฝ๋๊ฐ์์ 65๋ฅผ ๋บ ๊ฐ์ alphabet ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ํด์ 1์ฉ ์ฆ๊ฐ์์ผ์ค๋ค.

alphabet ๋ฐฐ์ด์ 0๋ฒ์งธ ์ธ๋ฑ์ค๋ถํฐ ๋ง์ง๋ง ์ธ๋ฑ์ค๊น์ง for ๋ฌธ์ ๋๋ฉด์ ์ ์ผ ํฐ ๊ฐ์ ์ฐพ์์ค๋ค.
์ด๊ธฐ๊ฐ์ ans = 0์ผ๋ก ๋๊ณ , for ๋ฌธ์ ๋๋ฉด์ ํฐ ๊ฐ์ ๊ฐฑ์ ์์ผ์ฃผ๋ฉด ๋๋ค.
๋ง์ฝ ์ ์ผ ํฐ ๊ฐ์ด 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ, b ๊ฐ์ true๋ก ๋ฐ๊ฟ์ค๋ค.
์ ์ผ ํฐ ๊ฐ์ด ํ๋๋ผ๋ฉด b ๊ฐ์ false์ด๊ณ index ๊ฐ์ ํด๋น ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๋ค.

b๊ฐ true์ด๋ฉด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ ์ํ๋ฒณ์ด ์ฌ๋ฌ ๊ฐ ์กด์ฌํ๋ ๊ฒ์ด๋ฏ๋ก ?๋ฅผ,
b๊ฐ false์ด๋ฉด ์ ์ฅ๋ index์ 65๋ฅผ ๋ํด์ ๋๋ฌธ์๋ฅผ ์ถ๋ ฅํ๋ค.
index + 65๋ Int ํ์ ์ด๊ธฐ ๋๋ฌธ์, UnicodeScalar๋ฅผ ์ด์ฉํ์ฌ Type Conversion์ ํด์ ์ถ๋ ฅํ๋ฉด ๋๋ค.



UnicodeScalar๋ Unicode.Scalar์ typealias์ธ๋ฐ, scalar ๊ฐ์ Unicode๋ฅผ ์๋ฏธํ๋ค.
์์คํค์ฝ๋๊ฐ์ ๋ฌธ์๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ ์ ํ๋ค.
์์ค ์ฝ๋ (Swift)
import Foundation let word = readLine()! var alphabet = [Int](repeating: 0, count: 26) for i in word { var asciiCode = Int(i.asciiValue!) if asciiCode >= 97 && asciiCode <= 122 { // ์๋ฌธ์์ผ ๊ฒฝ์ฐ, ๋๋ฌธ์๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ. asciiCode -= 32 } alphabet[asciiCode - 65] += 1 } var b = false var ans = 0 var index = 0 for i in 0...alphabet.count - 1 { if ans < alphabet[i] { b = false ans = alphabet[i] index = i } else if ans == alphabet[i] { b = true // ์ค๋ณต์์! ans = alphabet[i] } } b ?? print("?") : print(UnicodeScalar(index + 65)!) // ์์คํค์ฝ๋๊ฐ์ ์ด์ฉํด์ ๋๋ฌธ์ ์ถ๋ ฅ์์ค ์ฝ๋ (C++)
#include <iostream> #include <algorithm> #include <string> #include <cstring> using namespace std; char alphabet[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'r', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; int check[26] = {0, }; int ans = 0; int idx = 0; string word; int main(void) { cin.tie(0); cout.tie(0); std::ios::sync_with_stdio(false); cin >> word; for (int i = 0; i < word.length(); i++) { if (word[i] >= 'a' && word[i] <= 'z') { // ์๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๋ณํ word[i] -= 32; } } for (int i = 0; i < word.length(); i++) { for (int j = 0; j < 26; j++) { // A~Z๊น์ง์ ์ํ๋ฒณ์ ์ ๋ ฅ๋ ๋จ์ด์ ์ํ๋ฒณ์ ๊ฐ๊ฐ ๋น๊ต if (word[i] != alphabet[j]) continue; else { // ์ ๋ ฅ๋ ๋จ์ด์ ์ํ๋ฒณ์ด ์ํ๋ฒณ ๋ฐฐ์ด์ ๊ฐ๊ณผ ์ผ์นํ๋ค๋ฉด int num = word[i]; // ๊ทธ ์ํ๋ฒณ์ ์์คํค ์ฝ๋๊ฐ์ num์ ์ ์ฅํ๋ค. // check ๋ฐฐ์ด์์, check[0]์๋ A, check[1]์๋ B, check[2]์๋ C์ ํด๋นํ๋ ์ํ๋ฒณ์ด ๋์จ ํ์๋ฅผ +1 ํด์ค๋ค. // ์ด๋ ๊ฒ ์ฐจ๋ก๋๋ก ์ ์ฅํ๊ธฐ ์ํด check[num - 'A']ํ์ฌ ์ ์ฅํด์ค๋ค. check[num - 'A']++; } } } bool b = false; // ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋ ์ํ๋ฒณ์ด ์ฌ๋ฌ ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ฅผ ์ฒดํฌ for (int i = 0; i < 26; i++) { if (ans < check[i]) { // ๊ธฐ์กด์ ์กด์ฌํ๋ ์ต๊ณ ๋น๋์ ๊ฐ < ๋น๊ตํ๋ ค๋ ๊ฐ, ans ๊ฐฑ์ ํด์ฃผ๊ธฐ b = false; idx = i; ans = check[i]; } else if (ans == check[i]) { // ๊ธฐ์กด์ ์กด์ฌํ๋ ์ต๊ณ ๋น๋์ ๊ฐ == ๋น๊ตํ๋ ค๋ ๊ฐ, ans๋ ๊ฐฑ์ ํ์ง ์๊ณ , b = true๋ก ๋ฐ๊ฟ์ค๋ค. idx = i; b = true; } } if (b) cout << "?" << "\\n"; else cout << alphabet[idx] << "\\n"; return 0; }'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์คํจ์จ Level1 (Swift) (0) 2022.02.01 [Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์์ ์ํธ Level 1 (Swift) (0) 2022.01.31 [Algorithm] ๋ฐฑ์ค 10809 ์ํ๋ฒณ ์ฐพ๊ธฐ(Swift/C++) (0) 2022.01.30 [Algorithm] ๋ฐฑ์ค 11654 ์์คํค์ฝ๋ (Swift/C++) (0) 2022.01.30 [Algorithm] ์๊ฐ ๋ณต์ก๋ & ๊ณต๊ฐ ๋ณต์ก๋ (0) 2022.01.12