Coding Test

2022 우테코 onboarding 1~2번 리뷰

Backcoder 2022. 11. 8. 23:10

 

 

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));
    }
}