우테코 6기를 준비하며 5기 프리코스 문제를 하루에 하나씩 풀어보려고 한다.
기능구현 계획, 클린코드, 객체 지향을 생각하며 코드를 짜보자!
클린 코드나 메소드 명칭을 신경쓰다보니 다른 예시글을 거의 따라친 것 같다..
package week1;
public class Problem1 {
public static int find_max_between_plus_and_multi(int num) {
int units = 0;
int plus_sum = 0;
int multi_sum = 1;
while (num != 0) {
units = num % 10;
plus_sum += units;
multi_sum *= units;
num = num / 10;
}
return Math.max(plus_sum, multi_sum);
}
public static int find_max_between_left_and_right(int[] pages) {
int left_sum = find_max_between_plus_and_multi(pages[0]);
int right_sum = find_max_between_plus_and_multi(pages[1]);
return Math.max(left_sum, right_sum);
}
public static boolean is_invalid_page(int[] pages) {
int left_page = pages[0];
int right_page = pages[1];
if (pages.length != 2) {
return true;
}
if (left_page % 2 != 1) {
return true;
}
if (right_page > 400) {
return true;
}
return false;
}
public static int find_who_win(int pobi_num, int crong_num) {
if (pobi_num < crong_num) {
return 1;
}
if (pobi_num > crong_num) {
return 2;
}
return 0;
}
public static int solution(int[] pobi, int[] crong) {
int result = 0;
if (is_invalid_page(pobi) || is_invalid_page(crong)) {
return -1;
}
try {
int pobi_max = find_max_between_left_and_right(pobi);
int crong_max = find_max_between_left_and_right(crong);
result = find_who_win(pobi_max, crong_max);
} catch (Exception e) {
return -1;
}
return result;
}
public static void main(String[] args) {
System.out.println(solution(new int[]{11, 12}, new int[]{13, 14}));
}
}
Math.max
로 둘 중 큰 거 return!정말 조각 조각 쪼갤 수 있구나..
pr리뷰 환영합니다!!
https://github.com/skylar1220/java-onboarding/pull/2
Deque
https://velog.io/@roro/Java-Stack-Queue
2번 문제를 풀면서 메소드를 최대한 나눠서 시작하려고 하고, 객체지향에 몰입하다보니 처음 시작이 안풀리고 계속 꼬이는 것 같았다. 그래서 이번 문제는 일단 하나의 메소드로 쭉 알고리즘 문제 풀듯이 작성하고 완성한 후에 메소드를 나눠봤다.
pr링크
https://github.com/skylar1220/java-onboarding/pull/4/files
연산에 필요한 숫자들을 상수화 시키는 데 너무 세세하게 나눠서 이름을 다르게 짓고 하는 건 아닌가라는 생각이 들었다. 다른 스터디원들에게 물어봐서 개선점을 생각해봐야겠다!