일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링 #스프링 시큐리티 #spring security
- securityconfig
- WebConfigurerAdapter
- WebSecurity
- HttpSecurity
- Spring Security
- ㅂ
- 스프링시큐리티
- Session1이 그 모든 클라이언트의 저올
- ㅇㅇㅇㄴㅇ
- Today
- Total
다오의 개발일지
프로그래머스 LV.0 최댓값 만들기 (1) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/120847
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
LV.0 문제를 풀다가 쉬워보였지만 중간에 막히는 문제가 발생해서 작성하게 되었다.
이 문제는 파라미터로 넘어오는 배열에서 순서대로 최대값 2개를 서로 곱하여 리턴하는 함수이다.
numbers = {1,2,3,4,5}인 경우
최대값 2개인 5와 4를 곱해 20이라는 값을 리턴하는 방식이다.
우선 문제 해결에 다가가기 위해 아래의 순서대로 작성했다.
- numbers배열에서 max값을 뽑는다
- numbers2배열을 만들어 max값을 제외한 값을 삽입한다.
- numbers2배열에서 max2값을 뽑는다.
- 두 값의 곱을 구한다.
조금 절차가 길지만 해결만 할 수 있다면야...
import java.util.*;
class Solution {
public int solution(int[] numbers) {
// numbers배열에서 max값을 뽑는다
// numbers2배열을 만들어 max값을 제외한 값을 넣는다.
// numbers2배열에서 max2값을 뽑는다.
// 두 값의 곱을 구한다.
Arrays.sort(numbers);
int[] numbers2 = new int[numbers.length-1];
int answer = 0;
int max = 0;
int max2 = 0;
//max값 구하기
for(int i=0; i<numbers.length; i++){
if(max < numbers[i]){
max = numbers[i];
}
}
//max값을 제외한 numbers2배열 생성
for(int i=0; i<numbers.length-1; i++){
if(max != numbers[i])
numbers2[i] = numbers[i];
}
//numbers2배열에서 max2값 구하기
for(int i=0; i<numbers2.length; i++){
if(max2 < numbers2[i]){
max2 = numbers2[i];
}
}
//두개의 max값 곱하기
answer = max * max2;
return answer;
}
}
테스트도 성공했지만....
결과 채점에서 한개의 케이스에서 자꾸 틀리게 나왔다...
아무리 생각해봐도 모르겠어서 질문하기로 들어가보니 아니나 다를까. 나와 같은 테스트4번에서 실패한다는 글들이 많았다.
원인은 간단했다.
numbers = {1,3,4,5,5} 의 경우
즉 반례로 최대값이 같은 값이 나오는 경우 실패한다는 것이다.
어떻게 해야할까 하는 중
2번째 절차, numbers2에 max값을 제외한 배열을 넣을 때. if문에 !=을 넣으면 최대값과 같은 값은 들어가지 않아버려 1,3,4만 들어가게 된다.
그래서 if문을 max >= 로 수정해 작거나 같은 값을 배열에 넣게끔 수정하니 결과 채점을 통과 할 수 있었다.
작성코드
import java.util.*;
class Solution {
public int solution(int[] numbers) {
// numbers배열에서 max값을 뽑는다
// numbers2배열을 만들어 max값을 제외한 값을 넣는다.
// numbers2배열에서 max2값을 뽑는다.
// 두 값의 곱을 구한다.
Arrays.sort(numbers);
int[] numbers2 = new int[numbers.length-1];
int answer = 0;
int max = 0;
int max2 = 0;
//max값 구하기
for(int i=0; i<numbers.length; i++){
if(max < numbers[i]){
max = numbers[i];
}
}
//max값을 제외한 numbers2배열 생성
for(int i=0; i<numbers.length-1; i++){
if(max >= numbers[i])
numbers2[i] = numbers[i];
}
//numbers2배열에서 max2값 구하기
for(int i=0; i<numbers2.length; i++){
if(max2 < numbers2[i]){
max2 = numbers2[i];
}
}
//두개의 max값 곱하기
answer = max * max2;
return answer;
}
}
다른 사람의 문제풀이를 보니 참 돌고돌아 풀었다는 생각이 든다.
'코딩테스트' 카테고리의 다른 글
프로그래머스 LV.0 한 번만 등장한 문자 (0) | 2023.06.01 |
---|---|
프로그래머스 LV.0 영어가 싫어요 (0) | 2023.06.01 |
프로그래머스 LV.0 소인수 분해 (0) | 2023.05.30 |
프로그래머스 LV.0 합성 수 찾기 (0) | 2023.05.26 |
프로그래머스 LV0 분수의 덧셈 문제 (0) | 2023.05.23 |