Using Language : Java
Using Tools : IntelliJ
- 프로그래머스 문제 소개
<문자열 내 마음대로 정렬하기>
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때,
각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.
예를 들어 strings가 [sun, bed, car]이고 n이 1이면
각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.
strings n return
["sun", "bed", "car"] 5 ["car", "bed", "sun"]
["abce", "abcd"] 2 ["abcd", "abce", "cdx"]
- 문제 풀이 과정
각 배열의 n에 해당하는 값을 추출한다.
배열의 n을 추출한 것으로 단어의 정렬법을 생각한다.
2-1. n을 추출한 것을 단어의 앞에 붙여 넣어서 단어를 정렬하기로 함2-1과정에서 정렬된 단어들의 앞에 붙은 단어들을 다시 떼어준다.
값을 반환한다.
< Solution4.java >
import java.util.Arrays;
public class Solution4 {
public String[] solution(String[] strings, int n) {
String[] answer = new String[strings.length];
int len = strings.length;
// length 코드리뷰 당한것 적용
for(int i=0;i<len;i++){
// substring 자르는 인덱스 관리에 주의 (n,n)쓰면 망한다
// 배웠던 것 다시 생각
answer[i] = strings[i].substring(n,n+1)+strings[i];
}
Arrays.sort(answer);
for(int i=0;i<len;i++){
// substring에 시작 인덱스만 정해줄 경우는 시작인덱스부터
// 단어의 마지막까지 모두 추출
answer[i] = answer[i].substring(1);
}
return answer;
}
}
< Solution4Test.java >
import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;
public class Solution4Test {
@Test
public void 결과() {
Solution4 solution = new Solution4();
String[] strings={"sun","bed","car"};
int n=1;
String[] answer={"car","bed","sun"};
String[] strings2={"abce","abcd","cdx"};
int n2=2;
String[] answer2={"abcd","abce","cdx"};
assertArrayEquals(answer,solution.solution(strings,n));
assertArrayEquals(answer2,solution.solution(strings2,n2));
}
}
이번 문제는 별다른 시행착오 없이 문제가 잘 풀렸다.
substring에 대한 개념을 잘 이해해놓으니 string을 이용하여 단어를 자르고 추출할때에
효과적으로 쓰이는 것 같다.
물론 assert또한 결과를 테스트 할때 유용하게 쓰이고 있다.
intelliJ에서 제공해주는 값들을 잘 확인하면 생각보다 더 코딩이 효율적일 것 같다.