챌린지 소개
문제 및 해설
10월 3일부터 12월 4일까지 구름LEVEL에서 알고리즘 먼데이 챌린지를 진행하고 있습니다. 8주 동안 매주 월요일마다 새로운 문제가 출제되는데 문제를 풀거나 이전 주의 문제를 복습하면 스탬프를 모을 수 있습니다. 스탬프 개수에 따라 다양한 상품도 받을 수 있어서 알고리즘 공부에 대한 동기 부여도 되고 재밌게 도전해볼 수 있을 것 같아요!
개별 문제는 https://level.goorm.io/에서 문제명을 검색하면 풀어볼 수 있습니다.
챌린지 2주차(10월 10일 - 16일) 복습 후 풀이를 공유합니다. 더 자세한 풀이는 위 해설을 참고하시길 바랍니다.
백준처럼 readline으로 입력을 받아서 처리합니다. 문제 해결에 필요한 로직은 solution 함수로 분리했습니다.
문제 1. 합격자 찾기
입력이 다소 복잡한 문제입니다. 테스트케이스 개수(count)를 첫 줄로 받은 후 count*2 줄까지 입력을 받아 input 배열에 넣습니다. 테스트케이스마다 응시인원의 수와 시험 성적이 주어지는데 시험 성적만을 solution 함수의 매개변수로 넘겨주기 위해 filter()를 사용합니다. 시험 성적 라인의 끝에 공백이 포함되어 있으니 trim()으로 제거하고 split()와 map()을 이용해 공백을 기준으로 숫자 배열로 변환합니다.
테스트케이스들의 시험 성적 데이터가 담긴 배열에 대하여 각 성적 배열의 합과 평균을 구하고, filter()로 평균 이상 점수의 개수를 구합니다. 모든 테스트케이스의 결과 문자열을 한 번에 출력하기 위해 answer 배열에 추가하고 리턴합니다.
문제 2. 철자 분리 집합
먼저 문자열의 첫 자를 temp에 저장합니다. 두 번째 문자부터 for문으로 순회하면서 temp와 일치하지 않으면 answer(집합 개수)를 증가시키고 temp를 현재 문자로 업데이트합니다. 문자열 끝까지 순회하고 나면 같은 문자끼리의 집합 개수를 구할 수 있습니다.
문제 3. 출석부
JavaScript의 sort()는 기본적으로 문자열의 유니코드를 기준으로 정렬합니다. 따라서 문자열이 아닌 값을 정렬하기 위해서는 별도의 비교 함수를 인자로 전달해야 합니다. 이름을 기준으로 사전순 정렬하되 이름이 같으면 키(숫자)가 큰 순서대로 정렬해야 하므로 비교 함수를 구현합니다.
비교 함수 compareFunction(a, b)라고 한다면,
- 비교 함수의 리턴 값이 0보다 작으면 a를 b보다 낮은 인덱스로 정렬합니다.
- 비교 함수의 리턴 값이 0보다 크면 b를 a보다 낮은 인덱스로 정렬합니다.
arr 배열의 각 배열 원소에서 이름을 첫 번째 원소로, 키를 두 번째 원소로 전달하고 있습니다. 이름을 기준으로 오름차순 정렬하고(if-else if문), 키를 기준으로 내림차순 정렬합니다(else문). 이때 반드시 모든 경우에 대해 return해야 의도대로 정렬할 수 있습니다.
문제 4. 폭탄 구현하기
2차원 배열 board로 정사각형을 구현합니다. 폭탄의 위치가 1부터 시작하므로 편의상 행과 열의 개수가 n+1인 2차원 배열을 선언했습니다. dy(세로 방향), dx(가로 방향) 배열과 for문으로 각 폭탄 위치 주변을 탐색하며 정사각형의 폭탄 값을 증가시킵니다. 정사각형의 행마다 총합을 구해서 폭탄 값의 합을 구합니다.
궁금한 점이나 잘못된 점은 댓글로 남겨주시면 감사하겠습니다 :)
'컴퓨터과학(CS)' 카테고리의 다른 글
[구름/JavaScript] 알고리즘 먼데이 챌린지 3주차 (0) | 2022.10.30 |
---|---|
[구름/JavaScript] 알고리즘 먼데이 챌린지 1주차 (0) | 2022.10.10 |
[프로그래머스/JavaScript] 신고 결과 받기 (1) | 2022.09.21 |
[프로그래머스/JavaScript] 성격 유형 검사하기 (0) | 2022.08.29 |