문제
내가 작성한 정답
char
class Solution {
public int solution(int n, String control) {
for(char c : control.toCharArray()){
if(c=='w') n += 1;
else if(c=='s') n -= 1;
else if(c=='d') n += 10;
else if(c=='a') n -= 10;
}
return n;
}
}
//stream
class Solution {
public int solution(int n, String control) {
return n + control.chars()
.map(c->c=='w'?1:c=='s'?-1:c=='d'?10:-10)
.sum();
}
}
String
class Solution {
public int solution(int n, String control) {
for(String s : control.split("")){
if(s.equals("w")) n += 1;
else if(s.equals("s")) n -= 1;
else if(s.equals("d")) n += 10;
else if(s.equals("a")) n -= 10;
}
return n;
}
}
//stream
import java.util.*;
class Solution {
public int solution(int n, String control) {
return n + Arrays.stream(control.split(""))
.mapToInt(s->s.equals("w")?1:s.equals("s")?-1:s.equals("d")?10:-10)
.sum();
}
}
다른 사람들의 정답
switch
class Solution {
public int solution(int n, String control) {
int answer = n;
for(char ch : control.toCharArray()) {
switch(ch) {
case 'w': answer += 1; break;
case 's': answer -= 1; break;
case 'd': answer += 10; break;
case 'a': answer -= 10; break;
default:break;
}
}
return answer;
}
}
stream
class Solution {
public int solution(int n, String control) {
return control.chars().reduce(n, (acc, c) -> acc + (c == 'w' ? 1 : c == 's' ? -1 : c == 'd' ? 10 : -10));
}
}
reduce
- 인수가 하나인 경우 (reduce(accumulator)) : 두 개의 인수를 받아서 하나의 결과를 반환 (스트림이 비어있는 경우 Optional을 반환)
- 인수가 두 개인 경우 (reduce(identity, accumulator)) : 초기값 + 두 개의 인수를 받아서 하나의 결과를 반환
- 인수가 세 개인 경우 인수가 세 개인 경우 (reduce(identity, accumulator, combiner)) : 초기값 + 두 개의 인수를 받아서 하나의 결과를 반환 + 병렬 스트림에서 중간 결과를 결합하는 데 사용
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class ReduceExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 1. 인수가 하나인 경우: 스트림의 모든 요소를 더함
Optional<Integer> sum1 = numbers.stream().reduce((a, b) -> a + b);
sum1.ifPresent(s -> System.out.println("Sum (one argument): " + s)); // Output: Sum (one argument): 15
// 2. 인수가 두 개인 경우: 초기값을 10으로 설정하고 스트림의 모든 요소를 더함
int sum2 = numbers.stream().reduce(10, (a, b) -> a + b);
System.out.println("Sum (two arguments): " + sum2); // Output: Sum (two arguments): 25
// 3. 인수가 세 개인 경우: 병렬 스트림에서 모든 요소를 더함 (직렬 스트림에서는 combiner가 호출되지 않음)
int sum3 = numbers.parallelStream().reduce(0, (a, b) -> a + b, (a, b) -> a + b);
System.out.println("Sum (three arguments): " + sum3); // Output: Sum (three arguments): 15
// 문자열 연결 예제
List<String> words = Arrays.asList("Hello", " ", "World", "!");
String sentence = words.stream().reduce("", (a, b) -> a + b);
System.out.println("Sentence: " + sentence); // Output: Sentence: Hello World!
}
}
Share article