- 오늘의 학습 키워드 : Java - Character 클래스
[문제 이름 : 숫자 카드 나누기]
문제 url : https://school.programmers.co.kr/learn/courses/30/lessons/81301
내가 작성한 코드는 아래와 같다.
import java.util.*;
class Solution {
public int solution(String s) {
int answer = 0;
String result = "";
String temp = "";
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
// 숫자인 경우
if(Character.isDigit(c)) {
temp = "";
result += c;
} else {
// 문자인경우
temp += c;
}
// 문자를 리턴했는지 확인
int num = getNumber(temp);
if(num != -1) {
temp = "";
result += num;
}
}
answer = Integer.parseInt(result);
return answer;
}
static int getNumber(String s) {
if(!s.isEmpty()) {
switch(s) {
case "zero":
return 0;
case "one":
return 1;
case "two":
return 2;
case "three":
return 3;
case "four":
return 4;
case "five":
return 5;
case "six":
return 6;
case "seven":
return 7;
case "eight":
return 8;
case "nine":
return 9;
}
}
return -1;
}
}
Java에서 Character 클래스에 대한 지식이 있다면, 빠르게 풀이할 수 있는 문제다.
s의 길이만큼 순회하면서, 숫자면 결과값에 추가하고, 문자라면 해당 문자를 temp 문자열에 추가해주며 숫자에 해당하는 영어를 충족하는 경우에 결과값에 추가하도록 구현하였다.
다른 효과적인 풀이 방법이 있는지도 찾아보았다.
class Solution {
public int solution(String s) {
String[] numArr = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
String[] wordArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for (int i = 0; i < 10; i++) {
s = s.replace(wordArr[i], numArr[i]);
}
int answer = Integer.parseInt(s);
return answer;
}
}
더욱 쉽게 풀 수 있었는데, 빠르게 푸는 것을 목표로 해서 그런지 내 코드는 깔끔하지 않은 것 같다..
문제를 계속 풀며 다양한 방법을 떠올리도록 계속 도전해 나아가야겠다!
내가 풀이한 Character 클래스의 개념도 확실히 잡고 가면 좋을 것 같아서, 아래 정리해보고자 한다.
Character 클래스
Java.lang.Character 클래스의 기본 데이터 타입은 char에 대한 래퍼 클래스(wrapper class)이다.
기본 데이터 타입의 값을 객체 형식으로 표현하기 위해 사용한다.
1. 특정 대상인지 여부를 판별하는데 쓰이는 메서드
- Character.isUpperCase(c); => c가 대문자인지 여부
- Character.isLowerCase(c); => c가 소문자인지 여부
- Character.isLetter(c); => c가 문자인지 여부
- Character.isDigit(c); =? c가 숫자인지 여부
- Character.isWhitespace(c); => c가 공백문자인지 여부
2. 특정 대상 타입으로 변환하는데 쓰이는 메서드
- Character.toUpperCase(c); => c를 대문자로 변환한다.
- Character.toLowerCase(c); => c를 소문자로 변환한다.
3. 타입 변환 시 쓰일 수 있다.
- String s = Character.toString(c); => c를 문자열로 변환한다.
이는 String s = String.valueOf(c); 또는 String s = ch + ""로도 변환이 가능하다.
- 내일은 LCS(Longest Common Subsequence)이라는 최장 공통 부분수열을 구하는 알고리즘에 대해 복습해보려 한다.