728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다.
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://leetcode.com/problems/plus-one/
문제 설명
음이 아닌 정수를 나타내는 배열이 주어지고, 해당 배열 마지막 요소에 + 1을 증가시킵니다.
Input : [1, 2, 9]
Output : [1, 3, 0]
풀이 방법
이번에도 마음에 들지 않는 코드이고, 좀 어렵게 생각하여 푼 것 같습니다.
1. 더해야 할 배열의 마지막 인덱스가 9 인지 판단
2. 뒤에서부터 9의 개수가 몇 개인지 카운팅
3. 배열의 요소 모두 9라면 배열의 길이를 증가하여 return (9, 9 이면 1, 0, 0 으로)
4. 3번이 아니라면 카운팅 한 만큼 0으로 변경 및 그 앞자리는 + 1 연산
내 코드(JAVA)
public static int[] plusOne(int[] digits) {
// 끝자리가 9라면 계산 필요
if(digits[digits.length-1] == 9) {
// 뒤에서부터 9의 개수 카운팅
int cnt = 0;
for(int i=digits.length-1; i>=0; i--) {
if(digits[i] == 9) cnt++;
else break;
}
// 요소 모두 9라면 배열의 길이 증가 필요, 맨 앞에만 1로 바꿔주고 int[] 기본값은 0
if(cnt == digits.length) {
int[] arr = new int[digits.length+1];
arr[0] = 1;
return arr;
} else { // 모두 9가 아니라면 요소 앞은 +1이 되고 뒷자리는 0으로 변경
int len = digits.length-1;
while(cnt >= 0) {
if(cnt == 0) {
digits[len]++; break;
}
digits[len] = 0;
--len; --cnt;
}
return digits;
}
} else {
digits[digits.length-1]++;
return digits;
}
}
스터디 피드백 내용
굳이 if문으로 0일 때, 조건을 주기보다는 while문의 조건을 0보다 클 때로 수정하고, if문 내부 코드를 밖으로 빼는 게 낫지 않았을까요.
while(cnt > 0) {
digits[len] = 0;
--len; --cnt;
}
if(cnt == 0) {
digits[len]++;
}
반복문 안의 if문을 제거함으로써 효율성 증가 피드백
다른 사람 코드
https://leetcode.com/problems/plus-one/discuss/24082/My-Simple-Java-Solution
public int[] plusOne(int[] digits) {
int n = digits.length;
for(int i=n-1; i>=0; i--) {
if(digits[i] < 9) {
digits[i]++;
return digits;
}
digits[i] = 0;
}
int[] newNumber = new int [n+1];
newNumber[0] = 1;
return newNumber;
}
나의 답에 비해 너무 간단한 풀이를 보고 자괴감을 느꼈던 문제..
배열을 뒤에서부터 반복하는데,
맨 뒤 요소가 9보다 작다면 +1 해서 return, 그렇지 않으면 0으로 변경
이 반복문을 진행하면 모든 요소가 9가 아닌 이상 모두 처리 가능.
반복문에서 처리가 안되었다면 모든 요소가 9라는 케이스이고 배열의 길이를 증가하여 맨 앞자리를 1로 저장
int형 배열의 기본값은 0 이기에 다른 작업 필요 X
728x90
반응형
'알고리즘' 카테고리의 다른 글
[LeetCode/JAVA] 617. Merge Two Binary Trees (0) | 2021.07.18 |
---|---|
[LeetCode/JAVA] 58. Length of Last Word (0) | 2021.07.18 |
[LeetCode/JAVA] 14. Longest Common Prefix (0) | 2021.07.17 |
[LeetCode/JAVA] 500. Keyboard Row (0) | 2021.07.17 |
[LeetCode/JAVA] 637. Average of Levels in Binary Tree (0) | 2021.07.17 |
댓글