티스토리 뷰
안녕하십니까 감자코딩에 감자개발자입니다.
이번에 살펴볼 문제는 백준알고리즘의 10809문제인 알파벳찾기 문제입니다.
문제 링크
https://www.acmicpc.net/problem/10809
문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
예제 입력 1
baekjoon
예제 출력 1
1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
저번 문제에서도 그랫듯이 이번문제도 아스키코드를 알고있어야 합니다.
문제 해결 방법
1) 가장먼저 이전 문제와 거의 비슷한것같으면서도 다른점이 있습니다. 이전 문제에서는 알파벳소문자의 출현횟수를 나타냈다면, 이번에는 알파벳의 소문자의 첫번째 출현한 인덱스를 알아내는것입니다.
2) 첫번째 출현한 인덱스 반환 / 아닐경우 -1 반환이 가장 중요한 키 포인트라고 생각을합니다.
3) 저는 반복문을 사용하여 문제를 풀이하겠습니다. 이전 강의에서 말한것과도 비슷한데요, 'a' - 'z'까지의 반복문의 순회로 알아내보겠습니다.
4) 여기서 가장중요한 함수는 find()함수인데요, 저는 #include <string> ,#include <algorithm>헤더를 추가하여 사용하였습니다.
5) 반복문 실행도중에 find(순회하는 알파벳 소문자) 가 파라미터가 될것이고 str(입력한값)을 참조할것입니다.
str.find(i)이런형식이 되겠죠? find함수는 맨처음에 등장한 인덱스의 위치만 반환시켜주기 때문에! 중요합니다.
자세한 사항은 코드로 살펴보죠. 간단하면서도 find()함수를 모르면 순간 멈칫하셨을것입니다.
코드 리뷰
//
// 10809(알파벳찾기).cpp
// Algorigm_Study
//
// Created by kgh on 18/12/2018.
// Copyright © 2018 kgh. All rights reserved.
//
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(void){
string str;
cin >> str;
// string함수를 사용하면 첫번째 인덱스를 찾는문자의첫번째 인덱스만 발견해서 반환해주고, 못찾을 경우 -1을 출력해준다.
for(int i='a'; i<='z'; i++){
int idx = str.find(i);
cout << idx << ' ';
}
cout << endl;
}
이런식으로 간단하게 처리할 수 있었던 문제였습니다.
이상 감자코딩에 감자개발자였습니다. 감사합니다 :)
'Algorithm' 카테고리의 다른 글
[알고리즘] 백준 알고리즘 2743 단어 길이 재기 (0) | 2018.12.22 |
---|---|
[알고리즘] 백준알고리즘 10820 문자열 분석 (0) | 2018.12.20 |
[알고리즘] 백준알고리즘 10808 알파벳개수 (0) | 2018.12.18 |
[알고리즘] 백준알고리즘 10866 Deque 문제 (0) | 2018.12.18 |
[알고리즘] 백준알고리즘 1158 조세퍼스 문제 (0) | 2018.12.16 |
- Total
- Today
- Yesterday
- 감자개발자
- 알고리즘
- 리버싱
- 프로그래밍
- 머신러닝
- 스프링
- 노드
- BFS
- 복습
- Algorigm
- Spring
- Controller
- 감자코딩
- 개발하는 관광이
- Android
- node.js
- 백준알고리즘
- programming
- 초보자를 위한 C언어 300제
- 텐서플로우
- C langauge
- TensorFlow
- C언어
- 학교
- 코드엔진
- MVC
- node
- db
- 안드로이드
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |