2022 우테코 onboarding 3~4번 리뷰
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 3
3,6,9 게임 규칙으로, 주어진 숫자까지 총 몇 번 박수를 쳐야하는 지 구하는 문제였다.
=> 각 자리수 별 숫자 구하기
=> 부분합
예를 들어, 3663 의 경우, 총 박수를 4번 쳐야한다.
즉 각 자리 수 별로 3,6,9 를 포함하는 지 확인이 필요했다.
=> 1번 문제와 마찬가지로 while, %10, /10 을 이용했다.
숫자 1 부터 시작해서, 주어진 숫자까지 총 박수의 수를 구해야 했다.
n 번째 까지의 총 박수의 수는
n-1 번째 까지 총 박수의수 + n 번째 박수의 수
즉, 부분합이 적용될 수 있다.
부분합을 이용하면 몇 번째 까지의 값을 list 에 담을 때,
전 항을 이용할 수 있으므로, 매번 1번 부터 카운트를 하지 않아도 되고,
이후에 값을 조회 할 때를 생각하면, 매번 계산 할 필요 없이, 저장해 둔 값을 가져오기만 하면 된다.
public class Problem3 {
public static int solution(int number) {
List<Integer> list = new ArrayList<>();
list.add(0, 0);
list.add(1, 0);
for(int i = 2; i<10001; i++) {
int count = 0;
int j = i;
while (j > 0) {
if (j % 10 == 3 || j % 10 == 6 || j % 10 == 9) {
count++;
}
j = j / 10;
}
list.add(i, list.get(i - 1) + count);
}
return list.get(number);
}
}
Problem 4
A~Z, a~z 로 이루어진 문자열을
Z~A, z~a 로 대응하는 문자열로 바꿀 수 있는가 묻는 문제였다.
( 처음엔 replace 를 사용해 보려 했으나, replace 를 사용할 경우,
매번 index 마다 replace 가 다시 해당하는 char 모두에 적용 되므로 적절하지 않았다. )
=> Char / Int 형변환
=> 대칭 되는 char 규칙 발견
=> map 등 자료구조 활용
(1) char => int 로 형변환을 해서 사용하면, 반복문을 사용할 수 있다.
// 65~90 , 97 ~122 , 32
// 65 90 / 66 89 / ... 77 78 / 78 77 / ..
// 155 / 219
A~Z : 65~90 / a~z : 97~122 / 띄어쓰기 : 32
총합 155 / 총합 219
(2) 위의 규칙을 이용해서
총합 - 해당 문자열의 숫자 = 대응되는 문자열 숫자
를 구할 수 있었다.
( 띄어쓰기는 따로 처리 )
해당 문자 < = > 대응 문자
이런 구조라면 map!
public class Problem4 {
public static String solution(String word) {
Map map = new HashMap();
map.put(32, 32);
for (int i = 65; i < 91; i++) {
map.put(i, 155 - i);
}
for (int j = 97; j < 123; j++) {
map.put(j, 219 - j);
}
String newword = "";
for (int a = 0; a < word.length(); a++) {
int newcharint = (int)map.get((int)word.charAt(a));
newword += (char) newcharint;
}
return newword;
}
}
풀어놓고 보니 간단간단 한 거 같지만
아직은 풀이까지 시행착오를 겪는데 시간이 꽤 잡아먹힌다.
기초적인 알고리즘 사용등을 더욱 체화시키고, 알고리즘 지식을 차츰 더 더해가야 겠다.