나의 풀이
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class Solution {
public int solution(String[] spell, String[] dic) {
Arrays.sort(spell);
System.out.println(Arrays.toString(spell));
String str ="";
for(int i=0; i<spell.length; i++) {
str += spell[i];
}
System.out.println("str = " + str);
for(int i=0; i< dic.length; i++){
dic[i] = Stream.of(dic[i].split("")).sorted().collect(Collectors.joining());
System.out.println(dic[i]);
System.out.println(str);
if(dic[i].equals(str)){
return 1;
}
}
return 2;
}
}
▶ 문제 핵심 ★spell 배열에 있는 모든 원소를 사용해야 한다.
▶ String[ ] spell 배열의 요소를 정렬한 다음 하나의 문자열로 만들었다.
▶ String[ ] dic 배열의 경우 for문을 통해 배열의 원소에 개별적으로 접근하여, 정렬을 수행한 다음
▶ spell이 합쳐진 str 문자열과 배열 원소 dic[i]를 비교하였다.
다른 사람의 풀이
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public int solution(String[] spell, String[] dic) {
return Arrays.stream(dic).map(s -> s.chars().sorted().mapToObj(i -> String.valueOf((char) i)).collect(Collectors.joining())).collect(Collectors.toList()).contains(Arrays.stream(spell).sorted().collect(Collectors.joining())) ? 1 : 2;
}
}
▶ map(...........) 메서드는 String타입의 문자열을 한 글자씩 조개서 정렬은 한 후에
▶ 합쳐서 다시 정렬된 문자열을 만들고,
▶ 정렬된 해당 문자열을 가지고 있는 배열을 List으로 변환한다.
▶ chars() 메서드의 반환타입은 IntStream이다.
▶ mapToObj() 는 기본형스트림(ex-IntStream)을 Stream<E> 형태로 바꾼다.
▶ mapToObj() 메서드를 실행하는 시점에서 i(스트림의 요소)는 숫자의 형태이다.
▶ char라는 캐스팅 연산자를 써서 숫자를 '문자'로 바꾼다.
▶ 추가적으로 String.valueOf()를 사용하여 '문자'를 String타입의 "문자열"로 바꾼다.
'프로그래머스(자바) > LV.0(자바)' 카테고리의 다른 글
문자열 밀기★→ repeat()★, indexOf(), rotate() (0) | 2022.11.27 |
---|---|
직사각형의 넓이 구하기 → 열(column)로 접근하고 싶은 경우★ (0) | 2022.11.27 |
구슬을 나누는 경우의 수→순수(?) 조합 계산★★ (0) | 2022.11.27 |
문자열 계산하기★★→ 마법의 Integer::parseInt (0) | 2022.11.26 |
영어가 싫어요→for문을 이용한 갱신o, 배열+for문 (0) | 2022.11.26 |