본문 바로가기
백준

[백준] 10809번 - 알파벳 찾기

by 템닉___ 2024. 3. 20.

문제:

시도 횟수: 2번

처음 생각한 방법: 이 문제는 처음에 문제를 오독했던걸로 기억난다. 조금 오래되어서 어떤 생각으로 코드를 짰는지가 기억이 잘 안난다... 알파벳 순서, 배열에서의 인덱스 순서, 그리고 문제에서 주어진 처음 등장하는 위치 세 개중 두개를 혼동했던걸로 기억한다.

내 코드:

#include <bits/stdc++.h>
using namespace std;


int main()
{
    string S;
    cin >> S;
    int idx = 0;
    int arr[25]={0, };
    for(int i=0; i<S.size(); i++) {
        idx = (int)S[i] -97;
        arr[idx] += 1;
    }
    for(int i = 0; i<26;i++) {
        if(arr[i] == 0) {
            arr[i]=-1;
        }
        cout << arr[i] << " ";
    }
    return 0;
}
// 맞춘 답안
#include <bits/stdc++.h>
using namespace std;


int main()
{
    string S;
    cin >> S;
    int idx = 0;
    int arr[26]={-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1};
    for(int i=0; i<S.size(); i++) {
        idx = (int)S[i] -97;
        if(arr[idx]==-1) {
            arr[idx] = i;   
        }
        else {
            arr[idx] = min(arr[idx], i);
        }
    }
    for(int i = 0; i<26;i++) {
        cout << arr[i] << " ";
    }
    return 0;
}

모범답안: 

#include <iostream>
#include <string>
#include <vector>

int main() {
    std::string S;
    std::cin >> S;

    // 각 알파벳의 처음 등장 위치를 저장할 배열을 -1로 초기화
    std::vector<int> first_occurrence(26, -1);

    for (int i = 0; i < S.size(); ++i) {
        char ch = S[i];
        if (ch >= 'a' && ch <= 'z') {
            int idx = ch - 'a'; // 알파벳의 인덱스 계산
            if (first_occurrence[idx] == -1) { // 해당 알파벳이 처음 등장하는 경우
                first_occurrence[idx] = i; // 위치 저장
            }
        }
    }

    // 결과 출력
    for (int i = 0; i < 26; ++i) {
        std::cout << first_occurrence[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

GPT가 짠 답안이다. vector를 사용해서 초기화가 깔끔하다.

내 코드의 개선할 점: 어레이 대신 벡터를 사용해서 초기화를 깔끔하고 편하게 하기.

알고리즘 분류: 구현, 문자열

난이도: 브론즈 II

복습하면서 참고해본 블로그 목록:  X