코딩테스트

2022.03.24 토스뱅크 - Core Banking Developer

HTG 2022. 3. 25. 14:53
728x90

이번 토스뱅크에서 SSAFY와 부스트캠프에서 따로 지원을 받아 코딩테스트를 치게되었다.

총 7문제로 5문제의 알고리즘과 2문제의 SQL 문제가 있었다.

 

1. 간단한 분기 문제

어떤 돈을 송금할수있는가 보는 문제로 

세가지 기준에 해당하는 종료 분기를 구현하는 문제라고 생각이 되었다.

가장 생각을 많이한 것이 2번째 분기 2번 연속 가능할 때, 이때는 flag를 두고 전의 과정에서 성공, 실패를 구분하였다.

 

2. 정렬 문제

문제를 풀 수 있는 각각의 수를 구하고 이를 최대로 많이 풀 수 있는 걸 구한다.

이때 생각한게 각 문제를 얼마나 풀 수 있는가를 구하는 것인데 이를 map과 리스트를 사용하였다.

각 리스트의 원소를 확인하고 map에 람다를 사용하여 비교 함수를 만들어 T, F 리스트를 만들어 이를 더하는 식으로 구현하였다.

그리고 이를 가장 많이 풀 수 있는 순으로 정렬하였다. 또한, 출력에도 순서가 있어서 정렬을 해주었다.

 

3. 조합?

정확한 풀이는 모르겠지만 시간 초과로 인해 전부 정답을 출력하지는 못하였다.

리스트를 가지고 새로운 리스트를 만드는 과정이 $2^{n-1}$ 인데 n이 최대 30이라서 이를 줄여야 전부 맞을 수 있을거 같았다.

하지만 시간이 없어서 생각을 못하였고 브루트포스하게 모두 구하는 방식을 사용하였다.

이를 중간에 막거나 하는 방식을 사용하면 될 것으로 생각이된다.

 

4. 백트래킹?

특정 조합을 구하는 방식인데 이를 백트래킹으로 구현하였지만 시간 초과도 나고 정확한 정답 도출도 힘든거 같았다.

백트래킹으로 모든 조합을 보는 방식을 사용했지만 이또한 n이 조금 커서 구하기 힘들었고 

더욱 생각해봐야겠다.

 

5. 구현

구현 문제였는데 뭔가 바로바로 생각이나서 조금 쉽게 구하긴하였지만 이보다 더 줄일 수 있다고 생각이 된다.

총 3가지 방법으로 점수를 내는 것인데 각각의 방법에서 정확한 점수 계산이 중요하다고 생각이 되었다.

문제이해도가 높아야된다고 생각이된다.

특히 3번째 모두 다를 때 구하는 방식이 생각을 못하면 시간을 많이 소비할 것 같다고 생각이 되었다. 

 

6. join

단순 조인 문제였다.

최근 좀 많이 풀어본 형식의 문제라 그래도 간단히 구현할 수 있었다.

핵심은 어떤 2개의 테이블을 join 할 것인지와 0을 출력하는 것.

테이블은 총합을 구하기 때문에 group by와 count를 사용하였고 

0은 ifnull을 사용하였다.

 

7. 어려움... 

특정 계산을 해야했고 이를 위해 서브 쿼리를 작성해야했다.

서브 쿼리로 특정 값을 구하고 이를 원래 구하려고하는 순서로 구하고 최고값을 뽑기 위해 LIMIT를 사용하였다.

이렇게 원하는 최대값을 구했지만 가장 큰 문제는 이와 같은 값을 뽑아내야하는건데 이게 어려워 SQL문을 조금 더럽게 구현하게되었다.

앞서 구한 부분을 sub쿼리로 두고 또한 그 앞서 구한 sub를 다시 뽑아내 같은 부분을 뽑아내는 방식으로 구현하여 sub 쿼리를 난발하는 방식으로 구현하게되었다... 

이 부분을 좀더 생각해봐야겠다.

 

 

종합적으로 많이 어려운 편은 아니였지만 생각은 좀 많이 해야하고 특정 부분을 떠올려야 풀 수 있는 문제였다. 

SQL의 경우에는 6번은 자주나오는 문제였지만 7번은 생소하였고 이를 쉽게 구현하는 방식을 생각해봐야겠다.