7/16 16~18번 문제 풀이

강인호·2022년 7월 19일
0

알고리즘 문제풀이

목록 보기
6/39

16번 문제

16번 문제는 난이도가 중 으로 올라가면서 지문자체도 길어지고 확실히 복잡해진것이 느껴졌다. 일단 문제를 천천히 읽어봤을때 모든 더하는 경우의수를 하나의 배열로 만들어서 제출해야 했고,

옛날에 커닝시티 파티퀘스트때 6개의 술통위에 3명이 올라서서 넘어가는 원리로

1번찍고 23456번과 한번씩 다 더하고 2번찍고 3456번과 더하고....반복을 하면 모든 경우의 수가 다 더해진다

그래서 for문으로 첫번째 찍는값을 i=0으로 지정하고 한번 더 for문으로 j=i+1로 지정을 해서

빈 배열 answer을 하나 만든후 number[i]와number[j]를 더한값이 answer에 없으면 해당 값을 answer에 추가하는 식으로 돌렸고 다 돌린후 오름차순 정렬을 시켰다.

최종코드는

17번 문제

처음에는 문제가 무슨말인지 읽는데만도 오래 걸렸는데 결국에 지워지지 않은 번호중에서 맞은번호의 개수를 구하고, 지워진 번호의 개수를 구한 다음 지워진게 다 맞을경우가 최대등수,

지워진게 다 틀렸을 경우가 최소등수 라고 이해를 하고 문제는 길지만 값은 두개만 구하면 되는것이였다.

기존 번호에서 맞은 번호 개수 a를 구하고 0의 개수 j 를 구해서

a+j의 등수가 최고등수 j가 다틀렸을 경우 a의 등수가 최소 등수 라고 설정을 하고 함수를 짜려는데 분명히 뭔가 더 좋게 할수있는 방법이 있긴 할텐데 그런거 잘 몰라서 문제의 기준대로 직접 하나하나 짰다.

18번 문제

처음에 접근은 각자의 반복되는 배열을 만들고 답지의 인덱스랑 비교해서 맞으면 점수를 올리는 식으로 접근을 했다.

1번은 "12345" 2번은 "21232425" 3번은 "3311224455"의 문자열을 정의해주고 해당 문자열을 answers의 길이만큼 repeat후 split으로 쪼개서 배열을 만들었다.

그 후 for문으로 각 자리의 인덱스를 비교후 각자의 점수를 낸 다음

Math.max함수로 최댓값을 구했다. 처음에는 마무리를 어떻게 할지 되게 고민을 많이했는데

의외로 최댓값과 1번 점수가 일치하면 1을 넣는식으로 진행하니 동점일 경우에도 문제가 요구한 방식대로 별 무리없이 돌아갔다.

최종코드는

0개의 댓글