나를 기록하다
article thumbnail
반응형

백준(baekjoon) 1316 그룹 단어 체커

1. 문제 접근

처음 이 문제를 보고 바로 풀지 못하였다. 정렬을 사용해야 하나? 라는 생각을 했지만, 정렬로는 떨어져서 나타나는 단어를 구할 수 없었기에 넘어갔고, 그 다음으로 입력을 배열의 형태로 받아서 각 단어를 비교하는 방법을 생각했지만, 그것 또한 아니었다.

 

그리고 생각한 결과, 문제는 의외로 간단하였다.

예를 들어, abcdef라는 단어가 있다고 가정하자. a와 b를 비교하여 두 단어가 다르다면, b부터 끝까지인 bcdef를 새로운 단어로 저장하고, bcdef 안에 a가 있는지를 확인하면 된다. 확인 후 a가 존재하지 않는다면 그룹 단어에 1을 더하고, a가 존재한다면 그 단어는 그룹 단어가 아닌 것이다.

 

2. Python

n = int(input()) # 입력받을 문자의 개수

group_word = 0 # 그룹단어 개수 초기화
for _ in range(n): # n개의 단어 입력
    word = input()
    error = False # 에러를 False로 초기화

    for i in range(len(word) - 1): # i의 범위(0~단어의 길이-1)
        if word[i] != word[i + 1]: # 연속한 두 문자가 다를 경우
            new_word = word[i + 1:] # i번째 문자 이후인 i+1번째 문자부터 끝까지의 문자열을 새로운 단어로 생성
            if new_word.count(word[i]) > 0: # 새로운 단어에 i번째 문자가 있는지 확인
                error = True # 있다면 에러
    if not error: # 에러가 없다면
        group_word += 1 # 그룹 단어에 1을 추가
print(group_word)

 

 

3. Java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        int groupWord = 0;
        for (int k = 0; k < n; k++) {
            String word = br.readLine();
            boolean error = false;

            for (int i = 0; i < word.length() - 1; i++) {
                if (word.charAt(i) != word.charAt(i + 1)) {
                    String newWord = word.substring(i + 1);
                    if (newWord.indexOf(word.charAt(i)) >= 0) {
                        error = true;
                    }
                }
            }

            if (!error) {
                groupWord++;
            }
        }

        System.out.println(groupWord);
    }
}

이 문제에서 다른 코드들은 파이썬과 유사하나, 문자열을 자를 때 파이썬과 다르게 자바에서는 substring()이라는 함수를 사용한다.

 

substring()이란?

//사용법
String.substring(start) // 문자열  start ~ 끝까지 문자열 자르기
String.substring(start,end) // 문자열  start ~ end-1까지 문자열 자르기
		

//예제
String str = "DEVPRAO"; // 대상 문자열
// D=0 E=1 V=2 P=3 R=4 A=5 O=6의 index를 가진다.
		
str.substring(3); 
// substring(start) 결과값 = PRAO

str.substring(3, 6); 
// substring(start, end) 결과값 = PRA

위와 같은 방법으로 사용된다.

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...