728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
ROUTINE-STUDY/Algorithm
초보 알고리즘 스터디 / 누구나 참여 가능 :runner:. Contribute to ROUTINE-STUDY/Algorithm development by creating an account on GitHub.
github.com
알고리즘 스터디를 진행하고 있습니다.
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://leetcode.com/problems/plus-one/
Plus One - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com

문제 설명
음이 아닌 정수를 나타내는 배열이 주어지고, 해당 배열 마지막 요소에 + 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 |
댓글