알고리즘/프로그래머스

문제 풀이 스트림을 사용해서 LongStream에 rangeClosed메서드는 첫 번째 파라미터부터 두 번째 파라미터의 수까지 생성할 수 있다. Math.min, Math.max메서드를 이용해서 작은 값과 큰 값을 넣어준 뒤 sum메서드로 더 해 반환하면 된다. import java.util.stream.LongStream; class Solution { public long solution(int a, int b) { return LongStream.rangeClosed(Math.min(a,b),Math.max(a,b)).sum(); } }
문제 풀이 각 자릿수의 합을 구해서 x가 자릿수들의 합으로 나눠진다면 true를 리턴하면 되는 간단한 문제다. 스트림을 이용해서 풀어보았는데 x를 문자열로 바꿔준뒤 각 자리를 나눠줬고 그 뒤에 mapToInt메서드를 이용해 다시 int형으로 바꾸면서 더해주었다. 그리고 x를 더해준 값으로 나눠주고 나머지가 0이라면 true를 반환하게 하였다. import java.util.Arrays; class Solution { public boolean solution(int x) { int value = Arrays.stream(String.valueOf(x).split("")).mapToInt(Integer::parseInt).sum(); return x%value==0; } }
문제 풀이 입력받은 n을 toString메서드를 이용해 String으로 바꿔주고 for문으로 문자열의 뒷자리는 앞으로 넣어주는 반복을 해준다. class Solution { public int[] solution(long n) { String str = Long.toString(n); int[] answer = new int[str.length()]; for (int i = 0,j = str.length()-1; i < str.length(); i++,j--) { answer[j] = Integer.parseInt(String.valueOf(str.charAt(i))); } return answer; } }
문제 풀이 배열을 인수로 받아서 평균을 구하는 문제이다. 이 문제도 스트림으로 풀어보려 하는데 배열을 스트림으로 만들기 위해 Arrays.stream을 이용해서 스트림을 만들 수 있다. 스트림으로 만든 뒤 IntStream에 average메서드를 이용해 평균을 구한다. 그리고 배열이 비어 있는 경우를 대비해 orElse(0)을 넣어줘 비어있다면 0을 리턴하게 하였다. import java.util.Arrays; class Solution { public Double solution(int[] arr) { return Arrays.stream(arr).average().orElse(0); } }
문제 풀이 이 문제도 스트림으로 풀어보고 싶었지만 생각나지 않아 외부 구현으로 구현해보았다. 파라미터로 받은 수의 제곱근을 구하고 int형으로 형 변환해준 뒤 다시 제곱을 했을 때 파라미터로 받은 수와 비교해서 같다면 제곱근의 +1의 제곱을 반환하고 아니라면 -1을 반환하게 하였다. class Solution { public static long solution(long n) { if(Math.pow((int)Math.sqrt(n),2)==n){ return (long) Math.pow((Math.sqrt(n)+1),2); }else{ return -1; } } }
문제 풀이 이번 문제 또한 Stream을 이용하여 풀어보았다. 모든 약수를 더하는 문제인데 IntStream.range로 첫 번째 인수부터 마지막 인수-1 범위의 수들로 n의 숫자를 나눠 나머지가 0이면 더하는 조건을 만들어 풀어봤다. import java.util.stream.IntStream; class Solution { public int solution(int n) { return IntStream.range(1, n+1) .filter(num -> n % num == 0) .sum(); } }
문제 풀이 문제는 아주 간단하다 사실 이런 문제는 백준에서도 많이 풀어봤지만 스트림으로 풀어본 적은 없기에 스트림을 이용해서 풀어보았다. int형을 String으로 바꾼 뒤 split메서드로 배열로 변환하고 mapToInt를 이용해 정수형으로 변환한 뒤 각 자리의 합을 구한다. import java.util.*; public class Solution { public int solution(int n) { return Arrays.stream(String.valueOf(n).split("")).mapToInt(Integer::parseInt).sum(); } }
문제 풀이 제한사항을 확인하면 n이 3보다 크다 라는 제한이 있다 그러니 1의 나머지를 구하기 위해 2 이상의 값으로 나누고 가장 작은 자연수 x이기 때문에 x를 2부터 올려가면서 나머지가 1이 되는 값을 찾으면 된다. class Solution { public int solution(int n) { for(int i =2; i
E@st
'알고리즘/프로그래머스' 카테고리의 글 목록