7/16 10~12번 문제 풀이

강인호·2022년 7월 19일
0

알고리즘 문제풀이

목록 보기
4/39

10번 문제

이문제는 처음에 접근 자체를 잘못한 문제였다. 작은값만을 추려내기위해 문제에서 요구한 규격을 차마 생각 하지 못했다,

처음에 시도한 두개의 코드이다 내림차순 정렬을 한뒤에 맨 끝에 있는값이 제일 작은값이기 때문에 pop함수로 제거하는 방식과 내림차순 정렬 후 for문으로 맨 끝 값만 남기게 짜봤는데 테스트는 통과하는데 채점에서 자꾸 실패가 나길래 옆 조분들 한테 물어봤는데

정렬을 하는건 문제에서 요구하는게 아니여서 오류가 난것같다고 말해주셔서 돌아와서 코드를 보다가 이해를 했다.

[4,1,2,3] 이 주어지면 [4,2,3] 이 리턴이 되어야 하는데 내림차순 정렬을 하면 [4,3,2]가 리턴이 되어버려서 값이 틀려지게 되는것이였다.

그래서 코드를 지우고 Math.min() 란 함수를 찾아서 for문을 돌려서 0번째 인덱스 부터 하나씩 대입해서 i번째의 인덱스가 최솟값이랑 일치하면 해당 인덱스를 splice로 삭제했다.

처음에는 if문에 break 를 넣지 않아서 돌아가지 않았는데 곰곰히 들여다보니 우리가 지우는값은 하나기 때문에 하나를 지우고 바로 if 문을 빠져나오게 해야하는데 break 를 넣지않으면 탐색중 일치해서 값을 제거하고도 남은 길이만큼 탐색하고 남은 배열중 제일작은값을 삭제를 해버려서 값이 틀려지는 것이였다.

break를 넣고 정상적으로 구동되었다.

11번 문제

일단 for문으로 i가 500이 될때 까지 설정을 해주고 i가 한번 돌때마다

짝수면 answer값이 2로 나누어지고 홀수면 3곱하고 1더해지게끔 짠 후에 answer 값이 1이 되면 i값을 리턴하고 i값이 500이 되면 -1을 리턴하게끔 조건을 넣어줬다.

최종코드는

문제는 길지만 else를 포함한 4개의 조건만 제대로 넣는다면 그렇게 어렵진 않은 문제인것같다.

12번 문제

6번 문제에 있는 각 자릿수의 합을 구하는 함수를 그대로 가져와서 x값이 나누어지면 true 그렇지 않으면 false 를 리턴하게끔 짰다.

if문 위로는 앞의 문제에서 가져온 부분이고 if문만 새로 작성했다.

0개의 댓글