[프로그래머스] 체육복

jun5e00·2021년 4월 18일
0

알고리즘

목록 보기
6/6

소프트웨어 공학 시험 공부가 하기 싫어서 PL 공부하다가 마냥 놀기에는 죄책감이 느껴져서 알고리즘을 풀어봤다,,,

이번 문제는 체육복!! 뭔가 성의 없어 보이는 문제 이름이다 ㅋㅋㅋ.

생각하기

  1. answer에 전체 인원 수에서 분실한 사람의 수만큼 미리 빼서 할당했다.
  2. 여분을 챙겼는데 분실한 사람은 다른 친구에게 빌려주지 않기 때문에 우선적으로 처리해주었다. (lost, reserve 배열에서 없애고 answer++ 해주었다.)
  3. lost의 길이만큼 for문을 돌면서 reserve와 lost의 차이가 +-1일때만 answer를 증가시키고 reserve에서 삭제했다. (lost를 그대로 둔 이유는 어차피 lost는 처음부터 끝까지 돌기 때문이다.)

코드

function solution(n, lost, reserve) {
    var answer = 0;
    answer = n - lost.length;
    
    for(let i = 0; i < lost.length; i++) {
        for(let j = 0; j < reserve.length; j++) {
            if(lost[i] === reserve[j]) {
                answer++;
                lost.splice(i, 1);
                reserve.splice(j, 1);
                j--;
                i--;
            }
        }
    }
    
    for(let i = 0; i < lost.length; i++) {
        for(let j = 0; j < reserve.length; j++) {
            if(reserve[j] - lost[i] === 1 || reserve[j] - lost[i] === -1) {
                answer++;
                reserve.splice(j,1);
                break;
            } 
        }
    }
    return answer;
}
  • 처음에 여유분을 챙기면서 분실한 사람 처리를 할 때, 배열에서 제거만하고 인덱스 조절을 해주지 않아서 마지막 테스트 케이스를 통과하지 못했다. 더 꼼꼼하게 해야겠다~!~!~!~!

  • 함수형 프로그래밍 형식으로 짜는 연습을 해야겠다.

  • C++이나 Python을 사용할지 고민중이다. (나중에 코테를 위해서)

profile
공부 일기장

0개의 댓글