profile image

L o a d i n g . . .

article thumbnail image
Published 2021. 3. 6. 15:17

문제 : 알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

 

 

정답 :

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

int main(void)
{
	char arr[101];
	char* p = arr;
	int check;

	scanf("%s",p); 

	for (char i = 'a'; i <= 'z'; i++)
	{
		check = 0;

		for (int j = 0; j < strlen(arr); j++)
		{
			if (i == *(p+j)) // 포인터 연산으로 값을 역참조함.
			{
				printf("%d ", j);
				check += 1;
				break;
			}

		}

		if (check == 0)
		{
			printf("%d ", -1);
		}
	}

	return 0;
}

물론 다르게 풀어쓸 수도 있겠지만 이게 좀 더 간단해 보여서 이렇게 풀었다!

 

먼저 입력받은 단어를 넣을 배열 arr을 만들고, arr의 배열 포인터 p를 생성한다.

그리고 scanf로 단어를 입력받는다.

 

그런 다음 알파벳 'a'부터 'z' 까지 반복을 하는데, 이때 배열 arr의 길이만큼 중첩해서 또 반복한다. (이는 알파벳 하나하나마다 arr 배열의 모든 요소와 비교해 단어에 알파벳이 포함되어있는지 아닌지를 검사하기 위함이다.)

 

반복했을 때 만약 i와 같은 배열 값이 있다면, 그때의 인덱스(j)를 출력하고 두번째 반복문을 빠져나온다. 

그리고 두번째 반복문이 끝났을 때 check 값을 검사해서 알파벳이 단어에 포함되어 있지 않았을 경우(check == 0)인 경우 -1을 출력한다. 

'ETC' 카테고리의 다른 글

[P4C] BOJ 2003 : 수들의 합 2  (0) 2021.03.06
[P4C] BOJ 10773 : 제로  (0) 2021.03.06
22회 해킹캠프 후기 (feat.성실한 해커상 받은 썰)  (1) 2021.02.23
복사했습니다!