소개
이 블로그에서는 Java에서 문자열 처리에 사용되는 String 및 StringTokenizer를 사용하여 입력을 읽고 처리하는 방법을 비교하고, 코드 개선을 통해 발생한 차이점에 대해 논의합니다.
원본 코드
먼저 원본 코드 스니펫을 살펴보겠습니다:
java
Copy code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class 블로그_알고리즘_1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCases = Integer.parseInt(br.readLine());
for (int t = 0; t < testCases; t++) {
String strings = br.readLine();
String[] str = strings.split(" ");
HashMap<String, Integer> hashMap = new HashMap<>();
for (int j = 1; j <= Integer.parseInt(str[0]); j++) {
hashMap.put(str[j], hashMap.getOrDefault(str[j], 0) + 1);
}
String maxKey = null;
for (String key : hashMap.keySet()) {
if (maxKey == null || hashMap.getOrDefault(key, 0) > hashMap.getOrDefault(maxKey, 0)) {
maxKey = key;
}
}
if (hashMap.getOrDefault(maxKey, 0) > (str.length - 1) / 2) {
System.out.println(maxKey);
} else {
System.out.println("SYJKGW");
}
}
br.close();
}
}
개선된 코드
원본 코드를 다음과 같이 개선하였습니다:
java
Copy code
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class 블로그_알고리즘_1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCases = Integer.parseInt(br.readLine());
for (int t = 0; t < testCases; t++) {
String line = br.readLine();
StringTokenizer tokenizer = new StringTokenizer(line);
int count = Integer.parseInt(tokenizer.nextToken());
HashMap<String, Integer> hashMap = new HashMap<>();
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
hashMap.put(token, hashMap.getOrDefault(token, 0) + 1);
}
String maxKey = null;
for (String key : hashMap.keySet()) {
if (maxKey == null || hashMap.getOrDefault(key, 0) > hashMap.getOrDefault(maxKey, 0)) {
maxKey = key;
}
}
if (hashMap.getOrDefault(maxKey, 0) > (count - 1) / 2) {
System.out.println(maxKey);
} else {
System.out.println("SYJKGW");
}
}
br.close();
}
}
String vs. StringTokenizer
1. 문자열 처리 (String)
원본 코드에서는 String을 사용하여 입력을 분할하고 처리합니다.
String.split() 메서드를 사용하여 공백 문자로 문자열을 분할하고 배열에 저장합니다.
문자열 배열을 통해 데이터를 처리하며 문자열을 가져오고 특정 위치의 데이터를 사용합니다.
2. StringTokenizer
개선된 코드에서는 StringTokenizer를 사용하여 입력을 분할하고 처리합니다.
StringTokenizer를 사용하면 문자열을 토큰으로 분할하고 각 토큰을 이용하여 데이터를 처리할 수 있습니다.
StringTokenizer는 문자열 분할 및 처리에 특화되어 있어 코드를 간결하게 작성할 수 있습니다.
결론
StringTokenizer를 사용하여 개선된 코드는 입력 처리 및 데이터 추출을 훨씬 간편하게 만들었습니다. 이러한 개선을 통해 코드의 가독성과 효율성이 향상되었습니다. 문자열 처리에 StringTokenizer를 사용하면 복잡한 문자열 작업을 단순화하고 코드를 더 효과적으로 작성할 수 있으며, 이로 인해 개발 작업이 더욱 편리해집니다.