반응형
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
위와 같은 방법으로 사용된다.
반응형
'Algorithm > baekjoon' 카테고리의 다른 글
[백준 11003/자바(Java)] 최솟값 찾기 (0) | 2023.07.20 |
---|---|
[백준 11866 파이썬(Python) / 자바(Java)] 요세푸스 문제 0 (0) | 2023.06.28 |
[백준 1312 파이썬(python) / 자바(java)] 소수 (0) | 2023.06.20 |
[백준 1251 파이썬(python)/자바(java)] 단어 나누기 (0) | 2023.06.19 |
[백준 1181 파이썬/python] 단어 정렬 (0) | 2023.06.11 |