Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- BottomNavigation
- 코테자바
- ScreenSize
- 오블완
- 백준
- ModelViewPresenter
- 티스토리챌린지
- javaCoding
- CodingTestJava
- Java
- 코딩테스트 자바
- kotlin
- 안드로이드
- 코딩테스트 JAVA
- 코테
- pattern
- 자바
- 산타 환급반
- 코틀린
- programmers
- JavaCodingTest
- viewpager2
- 화면 크기 구하기
- 코딩테스트
- Android
- CodingTest
- baekjoon
- Coding-Test
- 뷰바인딩
- 자바 코딩테스트
Archives
- Today
- Total
KDLiam
[Programmers 코딩 기초 트레이닝 : Java] 원소들의 곱과 합 본문
➗ 합의 제곱 vs 곱 (프로그래머스 181929번)
📌 문제 링크: 프로그래머스 181929 - 합의 제곱과 곱 비교하기
📖 문제 설명
정수 배열 num_list가 주어졌을 때,
- 모든 원소의 곱과
- 모든 원소의 합의 제곱
을 비교하여 곱이 크면 0, 합의 제곱이 크거나 같으면 1을 반환하는 문제입니다.
✨ 첫 번째 풀이 (기본 방식)
class Solution {
public int solution(int[] num_list) {
int all_multiply = 1;
int square_of_all_sum = 0;
for(int n : num_list) {
all_multiply *= n;
square_of_all_sum += n;
}
int answer = all_multiply > Math.pow(square_of_all_sum, 2) ? 0 : 1;
return answer;
}
}
- Math.pow()를 활용 → 반환형이 double이라 int 비교에 부적절
- 변수명이 길어서 다소 가독성 떨어짐
✨ 두 번째 풀이 (개선된 방식)
class Solution {
public int solution(int[] num_list) {
int product = 1;
int sum = 0;
for (int n : num_list) {
product *= n;
sum += n;
}
int sumSquared = sum * sum;
return product > sumSquared ? 0 : 1;
}
}
- 변수명을 product, sum, sumSquared로 단순화
- sum * sum으로 합의 제곱 계산 → int 연산만 사용 → 더 안전
✨ 세 번째 풀이 (Stream API 활용)
import java.util.Arrays;
class Solution {
public int solution(int[] num_list) {
int product = Arrays.stream(num_list)
.reduce(1, (a, b) -> a * b);
int sum = Arrays.stream(num_list).sum();
int sumSquared = sum * sum;
return product > sumSquared ? 0 : 1;
}
}
💡 특징
- Arrays.stream(num_list).sum() → 합 구하기 간단
- reduce(1, (a, b) -> a * b) → 곱 구하기 가능
- 코드가 함수형 스타일로 깔끔해 보이지만, 내부적으로는 Stream 객체 생성 비용이 있음
📊 효율성 비교
항목for문 풀이Stream 풀이
| 가독성 | 직관적 (Java 기본 문법) | 함수형 스타일, 간결해 보임 |
| 성능 | 빠름 (O(n)) | 약간 느림 (Stream 객체 생성 오버헤드) |
| 실무 활용 | 기본 for문이 일반적 | 데이터 처리 파이프라인엔 Stream 유용 |
| 코딩테스트 적합성 | ✅ 추천 | ❌ 비추천 (불필요한 성능 손실) |
✅ 정리
- 이 문제는 단순 반복문만으로 충분
- **합의 제곱 = sum * sum**으로 처리 → Math.pow() 불필요
- Stream API는 가독성은 있지만, 코딩테스트에선 비효율적이므로 잘 쓰지 않음
'Problems(Java) > Programmers' 카테고리의 다른 글
| [Programmers 코딩 기초 트레이닝 : Java] 조건 문자열 (0) | 2025.10.02 |
|---|---|
| [Programmers 코딩 기초 트레이닝 : Java] 홀짝에 따라 다른 값 반환하기 (0) | 2025.10.02 |
| [Programmers 코딩 기초 트레이닝 : Java] 두 수의 연산값 비교하기 (0) | 2025.10.01 |
| [Programmers 코딩 기초 트레이닝 : Java] 더 크게 합치기 (0) | 2025.10.01 |
| [Programmers 코딩 기초 트레이닝 : Java] 문자열 곱하기 (0) | 2025.10.01 |