본문 바로가기
알고리즘/백준 문제 풀이

[BOJ/백준] 10809번 알파벳 찾기 - [c/c++] 풀이

by 미니상미니 2022. 10. 14.
반응형

https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

 

 

 

 


  • 문제

단계별로 풀어보기 - 문자열 - [3단계] 10809번


해설

c - 문자가 최초로 등장한 인덱스를 저장할 cnt배열을 0으로 초기화시킨다.

문자가 최초 등장 시 문자열의 인덱스 번호 + 1로 저장한다.

cnt배열을 순회하면서 0일 경우 -1을, 아닐 경우는 값 - 1을 공백을 두고 출력한다.

 

cnt에 값을 저장할 때 + 1을 하지 않는다면? 

문자의 최초 등장 인덱스가 0이라면 -1로 출력되는 문제가 발생한다.

 

c++ - s.find(n); 는 문자열 s에서 문자열 n이 최초로 등장하는 인덱스 번호를 반환해주는 함수이다.

만약 찾는 문자열이 없을 경우 string::npos를 반환한다.

npos의 값은 -1이지만 자료형이 unsigned이므로 int로 캐스팅 후 출력한다.

 

코드

c

#include <stdio.h>
#include <string.h>


int main() {

	int cnt[26] = { 0 , };

	char s[101];

	scanf("%s", s);

	for (int i = 0; i < strlen(s); i++) {
		if (cnt[s[i] - 'a'] == 0) cnt[s[i] - 'a'] = i + 1;
	}

	for (int i = 0; i < 26; i++) {
		if (cnt[i] == 0) printf("-1 ");
		else printf("%d ", cnt[i] - 1);
	}

	return 0;
}

 

c++

#include <iostream>
#include <string>

using namespace std;


int main() {

	int cnt[26] = { 0 , };

	string s;

	cin >> s;

	for (char i = 'a'; i <= 'z'; i++) {
		cout << (int)s.find(i) << ' ';
	}


	return 0;
}

 

 

 

 

 

반응형

댓글