ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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;
    }

    ๋Œ“๊ธ€

Designed by Tistory.