📌 문제
https://www.acmicpc.net/problem/11720
✅ 정답 코드
import java.io.*;
import java.util.*;
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());
String s = br.readLine();
int sum = 0;
for (int i = 0; i<s.length(); i++){
sum += s.charAt(i) - '0';
}
System.out.println(sum);
}
}
🥲 상식 점검하기
이제 브론즈는 탈출할 수 있을 줄 알았는데 다시 기본 상식을 많이 까먹은 것 같아 이 문제를 풀면서 점검해야할 부분을 올려보겠습니다..!
1️⃣ Integer.parseInt()의 역할
Integer.parseInt(String s) 메소드는 문자열을 정수형으로 변환하는 데 사용됩니다.
문자열이 아닌 단일 문자에 대해서는 직접적으로 사용할 수 없습니다.
예를 들어, 다음과 같이 코드를 작성하면 오류가 발생합니다.
String s = "123";
int num = Integer.parseInt(s.charAt(0)); // 오류 발생
위 코드는 s.charAt(0)이 char 타입이기 때문에 Integer.parseInt()는 제대로 작동하지 않습니다. 이를 해결하기 위해서는 char를 문자열로 변환해야 합니다.
따라서, 문자(char)를 정수(int)로 변환하기 위해서는 문자에서 '0'을 빼면 됩니다.
예를 들어, 문자 '3'를 정수로 변환하려면 다음과 같은 방법을 사용합니다.
char ch = '3';
int num = ch - '0'; // 3
이렇게 하면 문자 '3'의 ASCII 값에서 '0'의 ASCII 값을 빼게 되어, 해당 문자의 정수 값을 얻을 수 있습니다.
2️⃣ StringTokenizer의 한계
StringTokenizer는 문자열을 구분자를 기준으로 나누는 데 사용되는 클래스입니다.
하지만 빈 문자열 ""을 구분자로 사용하여 한 글자씩 분리하는 것은 되지 않습니다.
예를 들어,
String str = "Hello";
StringTokenizer tokenizer = new StringTokenizer(str, ""); // 작동하지 않음
이 코드에서는 NoSuchElementException이 발생합니다. 따라서 StringTokenizer는 문자열을 한 글자씩 분리하기 위한 방법으로는 적합하지 않습니다.
따라서, 문자열을 한 글자씩 분리할 때 가장 좋은 방법은 charAt() 메소드를 사용해야 합니다.
이 메소드를 사용하면 특정 인덱스의 문자를 직접 가져올 수 있습니다. 다음은 이 방법을 활용한 예제입니다.
public class Main {
public static void main(String[] args) {
String s = "12345";
int sum = 0;
for (int i = 0; i < s.length(); i++) {
sum += s.charAt(i) - '0'; // '0'을 빼서 정수로 변환
}
System.out.println("Sum: " + sum);
}
}
이 코드에서 s.charAt(i) - '0'을 사용하여 문자에서 '0'을 빼면 해당 문자의 정수 값을 얻을 수 있습니다. 예를 들어, '3'에서 '0'을 빼면 3이 됩니다. 이렇게 하면 문자열을 효과적으로 처리할 수 있습니다.
3️⃣ StringTokenizer 주요 메소드
.countTokens(): 토큰의 개수를 출력
import java.util.StringTokenizer;
public class CountTokensExample {
public static void main(String[] args) {
String str = "안녕하세요 자바 프로그래밍";
StringTokenizer tokenizer = new StringTokenizer(str);
int tokenCount = tokenizer.countTokens();
System.out.println("토큰 개수: " + tokenCount); // 결과: 토큰 개수: 3
}
}
.hasMoreTokens(): 리턴할 다음 토큰이 있으면 true, 다음 토큰이 없으면 false 리턴
import java.util.StringTokenizer;
public class HasMoreTokensExample {
public static void main(String[] args) {
String str = "안녕하세요 자바 프로그래밍";
StringTokenizer tokenizer = new StringTokenizer(str);
System.out.println("토큰 내용:");
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
System.out.println(token);
}
// 결과:
// 토큰 내용:
// 안녕하세요
// 자바
// 프로그래밍
}
}
브론즈는 아닌 줄 알았는데 브론즈 문제를 풀 때 오류가 나니 약간 닭이 된 기분이었다.
아녕하세요. 양꼬꼬입니다.
'코딩 테스트 일지 📒' 카테고리의 다른 글
[백준] 1181 단어 정렬 | 문자열, 정렬 | 실버 Ⅴ | JAVA 💡Arrays.sort (0) | 2024.10.07 |
---|---|
[백준] 2606 바이러스 | 그래프, DFS, BFS | 실버 Ⅲ | JAVA 💡DFS (1) | 2024.10.06 |
[프로그래머스] 프로세스 | 자료 구조, 큐 | Level.2 | JAVA 💟 반례 (2) | 2024.10.02 |
[백준] 9093 단어 뒤집기 | 구현, 문자열 | 브론즈 Ⅰ | JAVA 💡시간복잡도 아주 간단하게 줄이는 방법 (2) | 2024.09.28 |
[프로그래머스] 2021 KAKAO BLIND RECRUITMENT 신규 아이디 추천 | Level.1 | JAVA 💡정규표현식 (0) | 2024.09.27 |