알고리즘을 풀면서 String에 문자들을 차례대로 저장해야하는 순간이 있다.(ex) 백준 1755 숫자놀이)
그때 문자들을 차례대로 더해서 최종적으로 String에 저장된 값을 출력해보면 null값이 추가되는 경우가 있다.
그때 해결 방법을 기록해본다.
String tmp = "";
package boj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class BOJ_1755_숫자놀이_김성수 {
static BufferedReader br;
static StringBuilder sb;
// 입력 가능한 숫자는 1 ~ 99이므로 100으로 고정
static final int numListSize = 100;
// M ~ N까지의 정수를 저장할 리스트
static String[] numList;
static int N, M;
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine().trim());
// M과 N을 입력한다.
M = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
// 숫자 정보를 key-value 형태로 저장한다.(HashMap)
// 1 -> one
// 2 -> two
HashMap<Integer, String> numChangedText = new HashMap<>();
// numChangedText 초기화
numChangedText.put(1, "one");
numChangedText.put(2, "two");
numChangedText.put(3, "three");
numChangedText.put(4, "four");
numChangedText.put(5, "five");
numChangedText.put(6, "six");
numChangedText.put(7, "seven");
numChangedText.put(8, "eight");
numChangedText.put(9, "nine");
numChangedText.put(0, "zero");
// M ~ N까지의 숫자를 저장할 리스트
numList = new String[numListSize];
// M ~ N까지 숫자를 numList에 저장한다.
for(int num = M; num <= N; num++){
// 숫자가 10보다 작을 떄는 한자리이므로 숫자에서 문자로 변환된 값을 numList에 저장해준다.
if(num < 10){
numList[num] = numChangedText.get(num);
}else if(num >= 10){ // num이 10보다 같거나 클 때는 앞자리부터 문자로 변환해서 저장해줘야 한다.
// num을 String 형태로 변환한다.
String tmp = String.valueOf(num);
String tmpStr = new String();
// 변환된 tmp 값의 앞 문자부터 numList의 해당 num 인덱스에 저장해준다.
for(int tmpCharIdx = 0; tmpCharIdx < tmp.length(); tmpCharIdx++){
int numTmp = tmp.charAt(tmpCharIdx) - '0'; // 문자를 숫자로 변환한다
tmpStr += numChangedText.get(numTmp);
}
numList[num] = tmpStr; // 숫자로 변환한 문자에 매핑된 값을 numList에 저장해준다.
}
}
for(String str : numList){
if(str != null){
System.out.println(str.trim());
}
}
}
}
위 코드에서 보면 tmpStr을 new String()으로 초기화 시켜줬다. 이 때는 null 값이 출력되지 않는다.
하지만 String tmpStr = "";로 초기화해놓으면 null값이 함께 출력된다.
처음 초기화할 때 공백을 함께해서 저장하기 때문이다.
좋은 글 감사합니다.