[알고리즘문제풀기] 수 조작하기 1

silver's avatar
Apr 02, 2025
[알고리즘문제풀기] 수 조작하기 1

문제

내가 작성한 정답

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
  1. 인수가 하나인 경우 (reduce(accumulator)) : 두 개의 인수를 받아서 하나의 결과를 반환 (스트림이 비어있는 경우 Optional을 반환)
  1. 인수가 두 개인 경우 (reduce(identity, accumulator)) : 초기값 + 두 개의 인수를 받아서 하나의 결과를 반환
  1. 인수가 세 개인 경우 인수가 세 개인 경우 (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

silver