💻STUDY/BOJ

[BOJ] 10809. 알파벳 찾기 (C,Python3)

coldNoodlePigeon 2022. 1. 16.
  • 코딩 초보. 구현을 목표로 해서 코드가 비효율적일 수 있습니다.  

10809. 알파벳 찾기

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

 

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

 

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

 


1.C99

#include <stdio.h>

main() {
	char s[101];
	char a[26];
	int count = 1; 

	for (int i = 0; i < 26; i++) { //배열 초기화 
		a[i] = -1; 
	}

	gets(s);
	
	for (int i = 0;s[i];i++) {
		for (int j = 0;j<26; j++) {
			if ((s[i] - 97) == j && a[j] == -1) { //첫번째로 오는 알파벳이라면 
				a[j] = a[j] + count;
				count++;
			}
			else if ((s[i] - 97) == j && a[j] != -1) count++; //중복된 알파벳이 온다면 
		}
	}
	
	for (int i = 0; i < 26; i++) {
		printf("%d ", a[i]); 
	}
	
}

s라는 배열에 gets()함수를 이용하여 문자열을 받아 저장하고, a 배열은 모두 -1로 초기화 시킨다. (알파벳 소문자의 수는 모두 26개이므로 배열 크기도 26으로 설정.) s 문자열 끝까지 for 반복문을 통해서 해당 인덱스에 해당하는 알파벳 문자 (그러니까 만약에 b가 온다면, 인덱스로 접근을 해야하므로 b-97 을 해서 인덱스 값이 1이 되도록 하고, 이것이 j값과 같고 -1이 있다면 count만큼 더해서 저장하도록.) 가 존재하면 count만큼 증가시키기로 하였다. 여기서, 만약에 baekjoon 처럼 o가 중복되어 나오는 경우, 가장 첫번째로 o가 온 위치를 출력하도록 해야하므로 만약에 해당 문자가 인덱스에 있고, -1이 아니라면 count만 증가시키도록 하였다. 


(C)코드를 구현하면서 헷갈렸었던 점

 

일반적으로 배열을 초기화하는 방법에는 

#include <stdio.h>
main(){
	char s[101]={0,}; 
}

이 있는데 이 경우는 0으로 초기화할 때에만 가능한 것 같다. 만약 저 위치에 0이 아닌 -1로 초기화시켜주고 싶다고 한다면, 저런 방식으로 표현할 경우 모든 배열에 -1이 들어가는 것이 아니라 -1, 0, 0 ... 이런식으로 된다. 따라서 for 반복문을 이용하여 하나씩 값을 원하는 값으로 초기화시켜 넣어주어야 한다. 


2.Python

 

lst=[]
for i in range(26):
    lst.append(-1)

s=list(input())
count=1

for i in range(len(s)):
    for j in range(26):
        if((ord(s[i])-97)==j and lst[j]==-1):
            lst[j]+=count
            count+=1
        elif ((ord(s[i])-97)==j and lst[j]!=-1):
            count+=1

for i in range(26):
    print("%d" %(lst[i]),end=' ')

같은 맥락으로 구현하면 된다. c언어와 코드 구현에 큰 차이는 없다. 


 

'💻STUDY > BOJ' 카테고리의 다른 글

[BOJ] 8958. OX퀴즈 (C,Python3)  (0) 2022.01.17
[BOJ] 1259. 펠린드롬수 (C,Python3)  (0) 2022.01.16
[BOJ] 3052. 나머지 (C,Python3)  (0) 2022.01.15
[BOJ] 2908. 상수 (C,Python3)  (0) 2022.01.15
[BOJ] 2577. 숫자의 개수 (C, Python3)  (0) 2022.01.14

댓글