GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Coding Test

2022 우테코 onboarding 5~6번 리뷰

Backcoder 2022. 11. 9. 18:53

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 5 

금액이 주어졌을 때, 가장 적은 화폐 수로 지불하는 메소드 구현 문제였다. 

 

=> 변수의 재귀를 사용 할 수 있는가 

 

위를 묻는 문제가 아닐까 싶다. 

돈 단위를 배열에 담고, 몫을 리턴하면 되지만

나눈 후의 나머지를 money 에 재귀하여 집어넣는 과정이 필요하다. 

public class Problem5 {
    public static List<Integer> solution(int money) {
        List<Integer> answer = new ArrayList<>();
        Integer[] moneyScope = {50000, 10000, 5000, 1000, 500, 100, 50, 10, 1};

        for (int i = 0; i < moneyScope.length; i++) {
            answer.add(money / moneyScope[i]);
            money = money % moneyScope[i];
        }

        return answer;
    }
}

 

 

Problem 6

닉네임이 두 글자 이상 중복 될 경우, 중복된 아이디를 가진 유저의 email 을 중복없이, 오름차순으로 리턴하는 문제였다.

 

=> set, map 자료구조를 다룰 수 있는가 

=> substring, contains, sort 등의 사용 

 

(1) 먼저, 주어지는 자료구조가 List 안에 List가 들어있다. 

=> 이중 for 문, get(i).get(1) 등으로 두 번 값을 추출해서 사용했다. 

 

(2) 각 닉네임별로, 1~2 자리, 2~3자리 문자열을 substring 으로 뽑아내고 

 

(3) HashMap 을 생성해 key = substring 한 문자열 / value = 해당 유저의 이메일로 넣어주었다. 

=> substring 한 문자열이 중복 될 경우, map 의 value 값으로 이메일을 가져올 수 있다. 

 

(4) containsKey 를 이용해, 중복 여부를 검사한다. 

 

(5) 하지만 이렇게만 할 경우, 처음 map 에 넣는 중복되는 닉네임에 대한 정보는 containsKey 에 해당하지 않아 제외된다. 

=> 중복되는 문자열이 발생했을 경우, map의 keySet 전체를 돌며 해당 문자열을 key 로 가지는 값을 찾아 그 value 값도 add 시켜주었다. 

 

(6) email의 중복 방지는 set 에 담아서, 오름차순 정렬은 Collections.sort 를 이용했다.  

public class Problem6 {
    public static List<String> solution(List<List<String>> forms) {
        List<String> answer = new ArrayList<>();

        Set<String> email = new HashSet<>();
        Map<String, String> map = new HashMap<>();

        for (int i = 0; i < forms.size(); i++) {
            for (int j = 0; j < forms.get(i).get(1).length()-1; j++) {
                if (!map.containsKey(forms.get(i).get(1).substring(j, j + 2))) {
                    map.put(forms.get(i).get(1).substring(j, j + 2), forms.get(i).get(0));
                } else {
                    for (String overlap: map.keySet()
                    ) {
                        if (overlap.equals(forms.get(i).get(1).substring(j, j + 2))) {
                            email.add(map.get(overlap));
                            email.add(forms.get(i).get(0));
                        }
                    } // inner for
                } // else
            } //inner for
        } //outer for

        for (String mail : email){
            answer.add(mail);
        }
        Collections.sort(answer);
        return answer;
    }
}