#2 알고리즘[프로그래머스]

coldrice99·2024년 7월 31일
0

문제 설명

정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.

제한사항

0 < num1 ≤ 100
0 < num2 ≤ 100

입출력 예

num1	num2	result
 3	     2	     1500
 7	     3	     2333
 1	     16	      62
class Solution {
    public int solution(int num1, int num2) {
        
        double answer = (double) num1 / num2;
        answer = answer * 1000;
        return (int)answer;
	}
}

형변환 문제로 헷갈리기 쉬운 문제였다. answer가 실수로 계산되는 것과 1000을 곱해 다시 정수형으로 바뀌는 걸 잘 생각해야 한다. 그러다 다른 분이 풀어 놓은 정답을 보곤 머리가 잠시 띵해졌다.

class Solution {
    public int solution(int num1, int num2) {
        int answer = 0;
        return num1 * 1000 / num2;
    }
}

왜 이런 생각을 못했을까?


문제 설명

정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.

제한사항
0 ≤ numbers의 원소 ≤ 1,000
1 ≤ numbers의 길이 ≤ 100
정답의 소수 부분이 .0 또는 .5인 경우만 입력으로 주어집니다.

입출력 예

numbers											result
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]					5.5
[89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]	94.0

Sol1

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        for(int i=0; i<numbers.length; i++){
            answer += numbers[i];
        }
        answer = answer / numbers.length; 
        return answer;
    }
}

length는 배열의 길이를 알고자 할 때 사용되는 함수다.

Sol2

import java.util.Arrays;

class Solution {
    public double solution(int[] numbers) {
        return Arrays.stream(numbers).average().orElse(0);
    }
}

average()orElse(0)는 스트림을 활용하여 평균 값을 계산하고 반환할 때 유용한 명령어이다.

stream()은 데이터의 연속적인 흐름을 나타내는 기능이며 컬렉션(Collection)과 배열 등의 데이터 소스로부터 데이터를 받아들이고, 다양한 중간 연산과 최종 연산을 통해 데이터를 처리하는 기능을 제공한다.

스트림의 특징

1.데이터 소스: 스트림은 컬렉션, 배열, I/O 채널 등 다양한 데이터 소스로부터 데이터를 받아들일 수 있다.
2.연속적인 흐름: 스트림은 데이터를 순차적으로 한 번에 하나씩 처리합니다. 이는 데이터를 메모리에 모두 로드하지 않고 필요한 데이터만 처리할 수 있게 해준다.
3.중간 연산: 스트림은 중간 연산을 통해 데이터를 변환, 필터링, 정렬 등의 작업을 수행할 수 있습니다. 이러한 중간 연산은 지연(lazy) 연산이며, 최종 연산이 호출될 때에만 실제로 수행된다.
4.최종 연산: 스트림은 최종 연산을 통해 데이터를 처리하고 결과를 반환합니다. 최종 연산은 스트림 파이프라인을 종료시키는 역할을 수행하며, 스트림의 요소를 수집하거나 결과를 반환하는 역할을 할 수 있다.
5.내부 반복: 스트림은 내부적으로 반복을 처리하므로 개발자가 직접 반복 코드를 작성할 필요가 없다.

스트림을 사용하기 위해 다음과 같은 일련의 단계를 따를 수 있다.

1.스트림 생성: 데이터 소스로부터 스트림을 생성 후 Stream 인터페이스의 정적 메서드를 사용하거나, 컬렉션의 stream() 메서드를 호출하여 스트림을 생성할 수 있다.
2.중간 연산: 생성된 스트림에 대해 중간 연산을 적용한다. 이 단계에서 데이터를 변환, 필터링, 정렬 등의 작업을 수행할 수 있고, 중간 연산은 여러 개를 연결하여 체인 형태로 작성할 수 있다.
3.최종 연산: 최종 연산을 통해 스트림의 요소를 처리하고 결과를 반환한다. 이 단계에서 스트림의 파이프라인이 종료되며, 결과를 수집하거나 반환할 수 있다.

profile
서두르지 않으나 쉬지 않고

0개의 댓글