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;
}
}
'Coding Test' 카테고리의 다른 글
2022 우테코 3rd Week java-Lotto 리뷰 (0) | 2022.11.11 |
---|---|
2022 우테코 onboarding 7번 리뷰 (0) | 2022.11.09 |
2022 우테코 onboarding 3~4번 리뷰 (0) | 2022.11.08 |
2022 우테코 onboarding 1~2번 리뷰 (0) | 2022.11.08 |
SubTotal 부분합 = 전체합 - (부분-1) (0) | 2022.07.29 |