오늘 스터디 시간에는
1.오늘 배운 스키마 내용 복습
2.내일 해볼 스키마 과제 예습
을 진행했다.
복습한 내용은 부트캠프에 정리해두었고, 이 글에서는 오늘 풀었던 데일리 코딩 문제를 정리할 것이다.
오류부분을 어떻게 하면 깔끔하게 해결할 수 있을지 정말 많이 고민했고, 내가 생각하기에 정말 깔끔하게 수정한 것 같아 뿌듯해서 여기에 올려보려고 한다ㅎㅎㅎ
문제
수를 요소로 갖는 배열을 입력받아 각 요소들이 그 이전의 요소들의 합보다 큰지 여부를 리턴해야 합니다.
입력
인자 1 : arr
- int타입을 요소로 갖는 배열
- arr[i]는 정수
출력
- boolean 타입을 리턴해야 합니다.
- arr[i]는 arr[0]부터 arr[i-1]까지의 합보다 커야 합니다.
입출력 예시
1
2
3
4
5
|
boolean output = superIncreasing(new int[]{1, 3, 6, 13, 54});
System.out.println(output); // --> true
output = superIncreasing(new int[]{1, 3, 5, 9});
System.out.println(output); // --> false
|
cs |
문제 풀이
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
|
public class Solution {
public boolean superIncreasing(int[] arr) {
// TODO:
// 이전 요소들의 합 sum 선언
int sum = 0;
// arr[i] 와 sum을 비교하는 불리언 선언
boolean isBig = true;
// 반복문 순회 for
for(int i = 0; i < arr.length; i++){
// if(isBig이 false가 아니라면)
if(isBig = true){
// arr[i]가 sum보다 크면 isBig을 true로 하고 sum에 arr[i]계속더하기
if(arr[i] > sum){
isBig = true;
sum += arr[i];
}
// else면 isBig = false;
else isBig = false;
}
//else면 isbig이 false니까 반복문 탈출
else break;
}
//isBig 리턴
return isBig;
}
}
|
cs |
위와 같이 코드를 작성하고 테스트를 실행했더니
테스트 하나를 통과하지 못했다.
자세히 살펴보니 arr[0]가 음수로 입력되면 초기값이 0인 sum보다 작기에 isBig이 false가 되어 최종적으로 false가 리턴되는 상황이었다.
arr[0]가 음수인 경우 실제로 코드가 실행되는 과정을 직접 계산해보았더니 아주 조금의 코드 수정만으로 해결할 수 있을거라는 생각이 들었고
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
|
public class Solution {
public boolean superIncreasing(int[] arr) {
// TODO:
// 이전 요소들의 합 sum 선언
int sum = arr[0];
// arr[i] 와 sum을 비교하는 불리언 선언
boolean isBig = true;
// 반복문 순회 for
for(int i = 1; i < arr.length; i++){
// if(isBig이 false가 아니라면)
if(isBig = true){
// arr[i]가 sum보다 크면 isBig을 true로 하고 sum에 arr[i]계속더하기
if(arr[i] > sum){
isBig = true;
sum += arr[i];
}
// else면 isBig = false;
else isBig = false;
}
//else면 isbig이 false니까 반복문 탈출
else break;
}
//isBig 리턴
return isBig;
}
}
|
cs |
sum의 초기값과 반복문의 시작점을 i=1로 수정하니 테스트를 통과할 수 있었다.
아주 조금의 수정으로 문제를 해결해서 매우 기뻤다.
+레퍼런스 코드를 살펴보니 굳이 isBig이라는 불리언값을 생성할 필요 없이 반복문 내부에서 순회를 모두 마치면 true를 리턴하고 중간에 빠져나와야 한다면 false를 리턴하게 했으면 보다 효율적인 코드가 된다는 걸 알았다. 역시 아직은 갈 길이 멀다.
'코딩 스터디' 카테고리의 다른 글
정수형 배열에서 특정한 값 찾기 문제 (0) | 2023.02.09 |
---|---|
Schema 구현 및 INNER JOIN과 OUTER JOIN (0) | 2023.02.01 |
반복문을 곁들인 배열 요소 제거 문제 (0) | 2023.01.26 |
momo study(23.01.25) (2) | 2023.01.25 |
momo study(23.01.21) (0) | 2023.01.21 |