2022 우테코 onboarding 1~2번 리뷰
2022 우테코에서 진행하는 공개된 사전과제 코딩테스트 문제 입니다.
https://github.com/Backcoder-June/java-onboarding
GitHub - Backcoder-June/java-onboarding: 온보딩 미션을 진행하는 저장소
온보딩 미션을 진행하는 저장소. Contribute to Backcoder-June/java-onboarding development by creating an account on GitHub.
github.com
( 상세한 문제 설명은 링크를 타고 들어가서 확인해주세요! )
Problem 1
두 명이 책 페이지를 랜덤으로 오픈하고,
두 명은 책 페이지(왼쪽, 오른쪽)의 각 자리수를 더하거나, 곱한 값 중 가장 큰 값을 비교
비교 결과를 return 하는 문제였다.
=> 주어진 숫자의 각 자리수를 다룰 수 있는가
이를 물어보는게 핵심인 듯 하다.
while 문, %10 나머지 를 통해 10 씩 나누며 각 자리수를 구하는 방법을 이용했다.
public static int getMax(int page) {
int pobiSum = 0;
int pobiMulti = 1;
while (page > 0) {
pobiSum += page % 10;
pobiMulti *= page % 10;
page = page / 10;
}
if (pobiSum >= pobiMulti) {
return pobiSum;
} else {
return pobiMulti;
}
}
public static int solution(List<Integer> pobi, List<Integer> crong) {
int answer = Integer.MAX_VALUE;
if (pobi.get(0) + 1 != pobi.get(1) || crong.get(0) + 1 != crong.get(1)) {
answer = -1;
return answer;
}
int pobimax = 0;
if (getMax(pobi.get(0)) >= getMax(pobi.get(1))) {
pobimax = getMax(pobi.get(0));
} else {
pobimax = getMax(pobi.get(1));
}
int crongmax = 0;
if (getMax(crong.get(0)) >= getMax(crong.get(1))) {
crongmax = getMax(crong.get(0));
} else {
crongmax = getMax(crong.get(1));
}
if (pobimax > crongmax) {
answer = 1;
} else if (pobimax < crongmax) {
answer = 2;
} else if (pobimax == crongmax) {
answer = 0;
}
return answer;
}
Problem 2
문자열이 주어질 때, 동일한 char 이 연속해서 나올 경우, 연속한 char을 지울 수 있는 가 를 묻는 문제였다.
연속한 char 을 지웠을 경우, 지운 후의 문자열에서 또 다시 연속한 char이 발생할 수 있기 때문에,
이 작업을 계속해서 반복해줘야 한다.
=> 메소드를 정의하여 사용할 수 있는가
=> 재귀를 사용할 수 있는가
(1) String 일 경우, replace 를 사용하려 했으나, "" 빈값으로 replace 할 수 없어 지울 수 없었다.
=> StringBuffer 타입을 이용하면 deleteCharAt 메소드를 제공하므로 해당 index의 char을 지울 수 있었다.
=> 연속된 char 의 경우, 앞의 char 을 지울 경우, 뒤의 char은 다시 원래의 char index를 가지게 되므로,
deleteCharAt(i) 를 두번 적용시켜줬다.
=> 지우고 난 뒤의 문자열을 가지고, 다시 검사를 진행해야 하므로,
remover 메소드 안에서 다시 remover 메소드를 사용하는 재귀를 사용했다.
public class Problem2 {
public static StringBuffer remover(String answer) {
StringBuffer sb = new StringBuffer(answer);
for (int i = 0; i < sb.length() - 1; i++) {
if (sb.charAt(i) == sb.charAt(i + 1)) {
sb = sb.deleteCharAt(i);
sb = sb.deleteCharAt(i);
sb = remover(String.valueOf(sb));
}
}
return sb;
}
public static String solution(String cryptogram) {
return String.valueOf(remover(cryptogram));
}
}