[Baekjoon] 백준 1316번 Python / C

방선생·2025년 1월 10일
0

Baekjoon

목록 보기
5/24

백준 1316번

Python code

N = int(input())
cnt = N

for _ in range(N):
  word = input()
  
  for j in range(len(word)-1):
    if word[j] == word[j+1]:
      pass #아무것도 안함

    elif word[j] in word[j+1:]:
      cnt -= 1  
      break

print(cnt)

코드설명

  1. 전체에서 그룹단어가 아닌것을 빼기 위해 cnt = N로 설정

  2. 선택한 알파벳과 다음 알파벳을 비교해야하기 때문에 for문에 범위를 range(len(word)-1)로 하나 줄여서 인덱스가 초과 되지 않게함

  3. 바로 앞 알파벳이랑 현재 알파벳이랑 같으면 pass

  4. 다르면 현재 알파벳이 word[j+1: ]범위 안에 있는지 확인

  5. 있으면 그룹단어가 아니기 때문에 cnt -= 1

C code

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


int word_count(char *word){
  int alphabet[26] = {0}; 
  int len_word = strlen(word);

  for(int i = 0; i < len_word; i++){
    char current_word = word[i];

    if(i > 0 && current_word != word[i - 1]){
            
      if(alphabet[current_word - 'a'] > 0){
        return 0;
      }//전에 있었으면
      
    }//바로 전이랑 다르면

    alphabet[current_word - 'a']++;
  }

  return 1;
}//그룹 함수면 1, 아니면 0출력


int main() {
  int N;
  scanf("%d", &N);

  int group_word = 0;

  for(int i = 0; i < N; i++){
    char word[101];
    scanf("%s", word);

    if(word_count(word)){
      group_word++;
    }
    
  }

  printf("%d", group_word);

  
  return 0;
}

코드 설명

  1. 그룹 단어를 찾는 함수를 만듬

  2. 단어를 받아오고 비교할 알파벳을 정함(word[0]부터)

  3. 비교할 알파벳이 바로 전에 있던 알파벳이랑 다르고

  4. 바로 전을 제외하고 앞에서 한번이라도 나왔다면 return 0을 출력

  5. 만약 바로 전이랑 다르지 않거나, 한번도 안나왔다면 비교하고 있는 알파벳을 +1(나온 횟수 추가)하고 return 1을 출력

  6. 메인 함수에서 0(false)가 아닌 1(ture)면 그룹 단어 카운트 +1
  7. 반복하고 출력
profile
AI & Robotics

0개의 댓글