[백준 / BOJ] 10809번 알파벳 찾기 (C++, Python)◎ 자료구조와 알고리즘/백준(BOJ) 문제풀이2022. 1. 17. 09:22
Table of Contents
반응형
링크 : https://www.acmicpc.net/problem/10809
문제
문제 풀이
여러 가지 아이디어가 있지만 크기가 26인 배열을 선언해 해결하는 것이 가장 간단해 보인다.
C++ 상세 풀이
더보기
do
{
cin.get(c);
i++;
if (alp[c - 97] != -1)
continue;
alp[c - 97] = i;
} while (c != '\n');
알파벳이 26개이므로 배열의 크기는 26으로 설정했다.
다시금 cin / cin.get / cin.getline 의 특성을 생각해보자.
- cin은 엔터를 누를 시 버퍼에 개행문자가 남아있어 어떠한 문제가 생길 수 있다.
- cin.get은 문자만 입력받을 수 있고, \n을 다음 입력 버퍼에서 소거해준다. (엔터도 입력받을 문자로 간주)
- cin.getline은 문자열을 입력받을 수 있다.
따라서 위의 알고리즘에서는 while문 조건에 c != "\n"을 넣었으므로, 개행문자를 무시해야 해 cin.get을 사용했다.
...인데, 포스트를 전체적으로 수정하는 과정에서 너무 알고리즘을 못 짠것 같아 다시 코딩해보았다.
#include <iostream>
#include <string>
void init() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
}
int main() {
init();
std::string text;
std::string alp = "abcdefghijklmnopqrstuvwxyz";
std::cin >> text;
for(int i = 0; i < alp.length(); ++i)
std::cout << (int)text.find(alp[i]) << " ";
return 0;
}
STL의 find 함수는 찾는 값이 존재한다면 해당 값의 인덱스를 출력한다. 또한 (int)를 붙인 이유는 만약 찾을 값이 존재하지 않는다면 -1을 반환하는데, 이 값이 unsigned로 되어있어 이상한 양수가 출력되기 때문이다.
Python 상세 풀이
더보기
alp = [-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 i in range(len(val)):
if alp[ord(val[i]) - 97] != -1:
continue
alp[ord(val[i]) - 97] = i
alp 리스트에 26개의 -1을 미리 선언해둔 후, 입력받은 글자 수만큼 for문을 도는 동안 처음 인덱스를 alp에 저장한다.
C++ 코드 전문
Python 코드 전문
소감
반응형
'◎ 자료구조와 알고리즘 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 / BOJ] 1157번 단어 공부 (C++, Python) (0) | 2022.01.17 |
---|---|
[백준 / BOJ] 2675번 문자열 반복 (C++, Python) (0) | 2022.01.17 |
[백준 / BOJ] 11720번 숫자의 합 (C++, Python) (0) | 2022.01.17 |
[백준 / BOJ] 11654번 아스키 코드 (C++, Python) (0) | 2022.01.17 |
[백준 / BOJ] 1065번 한수 (C++, Python) (0) | 2021.09.07 |
@Reo :: 코드 아카이브
자기계발 블로그