· 오늘 공부한 것

프로그래머스에서 스킬체크 입문자 테스트

깃헙에 TIL 레포지토리 생성

 

· 공부한 내용, 궁금한 내용, 부족한 내용

N stages answer
5 [2,1,3,4,5,2,3,2] [5,3,4,2,1]
4 [4,4,4,4] [4,1,2,3]

코딩 테스트에서 마지막 문제가 스테이지별 실패율을 구해서 실패율이 높은 스테이지순으로 정렬한 결과를 내는 것이었다. 여기서 실패율은 (해당 스테이지에 머무르고 있는 사람들 / 해당 스테이지를 도달한 사람들)로 구할 수 있었다. 매개변수로는 전체 스테이지 수인 N 값과 전체 인원들이 머무르고 있는 스테이지를 배열 stages 값이 있었다.

function solution(N, stages) {
    var answer = [];
    return answer;
}

해결 방법으로는 1 ~ N까지 for문을 돌리면서 이중 반복문을 통해서 stages에 있는 값들을 돌면서 통과했는지 머무르고 있는지에 따른 값을 각각에 저장해서 반복문이 끝나고 나서 실패율을 구한 값을 빈 배열에 넣었다. 이렇게 해서 스테이지별 실패율이 있는 배열을 구할 수 있었다.

function solution(N, stages) {
    let answer = [];
    let fail = [];
    let reach = 0;
    let pass = 0;
    for (let stage = 1; stage <= N; stage++) {
    	for (let i = 0; i < stages.length; i++) {
        	if (stages[i] > stage) {
            	pass += 1;
            }	else if (stages[i] === stage) {
            	reach += 1;
            }
        }
        fail.push(reach / (reach + pass))
        reach = 0;
        pass = 0;
    }
	return answer;
}

이렇게 구한 스테이지별 실패율이 있는 배열을 보고 실패율이 높은 스테이지부터 정렬해야 했다. 만약 실패율이 같다면 낮은 스테이지부터 나오게 해야 한다. 그래서 실패율이 있는 배열을 while문으로 돌리면서 해당 값이 max값이면 인덱스 값에 +1을 해서 answer 배열에 넣었다. 그렇게 최대 실패율 스테이지가 answer에 들어가게 되면 해당 스테이지의 실패율을 -1으로 만들었다. 그래야 다음 최대 실패율이 바뀌기 때문이다.

function solution(N, stages) {
    let answer = [];
    let fail = [];
    let reach = 0;
    let pass = 0;
    
    for (let stage = 1; stage <= N; stage++) {
    	for (let i = 0; i < stages.length; i++) {
        	if (stages[i] > stage) {
            	pass += 1;
            }	else if (stages[i] === stage) {
            	reach += 1;
            } 
        }
        fail.push(reach / (reach + pass))
        reach = 0;
        pass = 0;
    }
    
    let idx = 0;
    while (Math.max(...fail) > -1) {
      if (Math.max(...fail) === fail[idx]) {
        answer.push(idx + 1);
        fail = [...fail.slice(0, idx), -1, ...fail.slice(idx + 1, fail.length)];
        idx = 0;
      } else {
        idx += 1;
      }
    }
    
	return answer;
}

 

· 오늘 서칭 한 자료

https://programmers.co.kr/skill_checks

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

https://github.com/lsj135779/Today-I-Learned

 

GitHub - lsj135779/Today-I-Learned: TIL 작성 레포지토리

TIL 작성 레포지토리. Contribute to lsj135779/Today-I-Learned development by creating an account on GitHub.

github.com

· 느낀 점

TIL을 블로그에도 남기고 깃헙에도 올리는 식으로 하면 마크다운 문법도 계속 익히고 commit도 남길 수 있을 거 같다.

오랜만에 알고리즘을 풀다 보니 보이는 그대로 일단 코딩을 작성해서 효율적이지는 않았다. 그래도 확실히 문제해결능력은 많이 발달하는 느낌이다.

지금은 자바스크립트로 알고리즘 문제를 해결하고 있는데 빨리 java 문법을 익혀서 java로 풀어봐야겠다.

반응형

'Today I Learned' 카테고리의 다른 글

2023-10-17 TIL  (0) 2023.10.18
2023-10-16 TIL  (0) 2023.10.17
2023-10-11 TIL  (0) 2023.10.12
2023-10-10 TIL  (0) 2023.10.10
2023-10-06 TIL  (0) 2023.10.07

+ Recent posts