이력서를 넣으면서 공부를 하는 와중에 월요일날에 코딩 테스트가 잡혔다.
그래서 연휴도 반납하고 알고리즘 공부를 손봤다.
알고리즘에 대해서 흥미는 있지만 실력은 부족하다는 것을 누구보다 잘 알고 있다.
주말 내내 알고리즘 문제를 풀다보면 코딩테스트에 도움이 되지 않을까 하여 프로그래머스에서 알고리즘 문제를 풀었다.
VUE 강의에서는 npm으로 프로젝트 폴더를 생성하는 법과 https 로 run 및 build 하는 법을 배웠다.
VUE 부분은 정말 간단한 것이고 지금은 알고리즘이 너무 급해서 알고리즘에 중점을 뒀다.
입문자 랜덤 문제를 풀었다.
문제는 2문제, 시간은 40분이 주어진다.
그래도 내 알고리즘 실력이 아주 엉망진창은 아닌것 같아서 다행이다.
1번 문제는 4~20자 사이의 핸드폰번호를 뒷 4자리만 남기고 처리하는 문제였다.
앞 자리 // 뒷 4자리로 번호를 나누었고, 앞 자리를 ''로 치환하였다.
너무 간단한 문제.
2번 문제는 price=놀이기구 가격 money=가진 돈 count=타고 싶은 횟수
이며, 예를 들어 놀이기구 가격이 100원이라면 2번째 탈때는 200원, 3번째에는 300원 이런식으로 가격이 올라간다. 그렇게 해서 원하는 횟수만큼 타려할 때, 돈이 얼마 부족한지 나타내는 문제였다. 만약 돈이 충분하다면 0을 return 하면 된다.
for문을 이용하여 count만큼 i++를 해주고
그것을 price와 곱하여 answer에 넣어주었다.
그러면 총 필요한 금액이 나온다.
총 필요한 금액을 money로 빼주면 부족한 금액이 나오고 부족한 금액이 음수라면 돈이 충분하다는 의미이므로 return 0 을 해주었다.
두 문제가 그렇게 어렵지 않은 난이도로 걸려서 금방 풀은 것 같다.
남은 주말동안 계속 풀어볼 예정이다.
추가로 풀게 된 문제는 계속해서 수정하여 덧붙이겠다.
2022/12/25 알고리즘 문제풀이 추가
내가 생각해도 너무 어거지로 접근한 것 같긴 하지만, 풀렸으니깐 써본다.
먼저 array를 string으로 바꾸는데 ','를 공백으로 바꿔서 숫자를 쭉 이어붙였다.
위의 예제로 보자면,
[7,77,17] -> 77717
[10,29] -> 1029
이런식으로 변환을 했다. 그리고 변환한 값의 length를 기록했다.
77717 -> 5
1029 -> 4
그 다음 모든 7을 공백처리 한 후에 length를 기록했다.
77717은 1만 남을 것이고 length는 1
1029는 1029가 남을 것이므로 length는 4
마지막으로 처음 기록했던 length 에서 그 다음 기록한 length를 뺀다.
결국 이 값이 7의 개수인 것이다.
정규식은 너무 대단하다.
일단, 중간 수는 num이 홀수인 경우에는 total/num이고
짝수인 경우에는 total/num-0.5 와 total/num+0.5가 중간이 된다.
그리고 num이 곧 result의 길이가 되는 것을 이용해 for문을 사용했다.
중간 수, 길이를 이용하여 -- 및 ++ 해주어서 답을 구했다.
중간 수가 겹치는 것은 시작점에서 -1을 해주어서 해결했다.
사실 이걸 말로 풀어 설명하려니 너무 어렵다...
위 설명이 충분하기를 바랄뿐이다.
정말 난잡한 풀이이긴 하지만... 원리는 위에 설명한 것과 일치하다.