문제:

시도 횟수: 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
'백준' 카테고리의 다른 글
[백준] 1152번 - 단어의 개수 (0) | 2024.03.20 |
---|---|
[백준] 2675번 - 문자열 반복 (0) | 2024.03.20 |
[백준] 11718번 - 그대로 출력하기 (0) | 2024.03.20 |
[백준] 2744번 - 대소문자 바꾸기 (0) | 2024.03.20 |
[백준] 2738번 - 행렬 덧셈 (0) | 2024.03.18 |