문자열배열을 입력받아 세로로 읽을때처럼 출력하는 문제였다. 예를 들어
"hello"
"world"면
"hweolrllod" 이렇게 출력하는 문제였다.
그래서 일단 빈문자열을 만들고 길이순으로 정렬하고, 이중반복문으로 한글자씩 넣어줬는데
대체 왜 틀렸지 하며 머리아팠는데 다시 문제를 보니
"hi"
"world"면
"hwiorld"가 나와야하는데
내가 길이순으로 정렬해서.. 바보같이...
길이순으로 정리하는게 아니라 가장 긴길이를 구하고 구한만큼 반복해야 하는건데....정렬을 바꾸는게 아니라..
처음 짠 코드는 이랬다. 테스트가 잘 통과하길래 뭔문제지? 했다...
public class Main {
public static void main(String[] args) {
String[] arr = new String[]{"aaaaa", "bbbbb","cccc"};
//빈문자열 만들기
String result = "";
//길이가 긴 순서대로 정렬
Arrays.sort(arr, new Comparator<String>() {
public int compare(String s1, String s2) {
return s2.length() - s1.length();
}
});
//이중반복문으로 각 요소 순회하고 result에 한글자씩 넣어주기
for(int j = 0; j < arr[0].length(); j++){
for(int i = 0; i < arr.length; i++){
if(j >= arr[i].length()){
continue;//만약 뒤의 문자가 더 짧을때 없는 요소는 무시해야 한다.
}
result += arr[i].charAt(j);
}
}
System.out.println(result);
}
}
그래서 정렬을 빼고 가장 긴요소를 찾고 그 길이만큼 반복해줬다.
public class Main {
public static void main(String[] args) {
String[] arr = new String[]{"aaaaa", "bbbbb","cccc"};
//빈문자열 만들기
String result = "";
//가장 긴 요소 찾아내자!
int maxLength = 0;
for(int i = 0; i < arr.length; i++) {
if(maxLength < arr[i].length()) {
maxLength = arr[i].length();
}
}
//이중반복문으로 각 요소 순회하고 result에 한글자씩 넣어주기
for(int j = 0; j < maxLength; j++){
for(int i = 0; i < arr.length; i++){
if(j >= arr[i].length()){
continue;//만약 뒤의 문자가 더 짧을때 없는 요소는 무시해야 한다.
}
result += arr[i].charAt(j);
}
}
System.out.println(result);
}
}
와! 이러니깐 바로 모든 테스트를 통과했다. 문제가 정말안풀릴땐 리프레시 해주고 다시 봐야할것같다. 근본적인 문제가있었는데 이걸 발견 못하다니..
'Java > 알고리즘' 카테고리의 다른 글
최댓값과 최솟값 (0) | 2023.04.18 |
---|---|
정수배열 각 요소가 앞에 요소들의 합보다 크면 레알참트루 (0) | 2022.12.06 |
문자열사이에 '-' 삽입하자! (홀수사이에만!) (0) | 2022.11.26 |
문자열중 특정문자로 시작해 특정문자로 끝나는지 찾아용 (1) | 2022.11.25 |
2차원배열을 HashMap으로 / [구현]보드게임 (0) | 2022.11.25 |