목록2025/04 (5)
Sonji-log

HackerRank에서 C++문제를 조금 풀었더니 받은 뱃지.아무래도 Medium 레벨 문제부터 들어가서 경험치가 많이 찼던 것 같다.HackerRank 특성상 개수로만 밀어붙여도 꽤 많은 경험치를 얻을 수 있기 때문에 뱃지는 그냥 공부의식 고취를 위해서 주는 타이틀이 아닌가 싶다.물론 그 목적에 완벽히 부합하게 받고 좋아했다.

간단한 알고리즘을 제한시간 내 성공적으로 풀이한 사람에게 주어지는 증명같다.난이도가 어렵지 않다는 점만 기억나고, 실제로 무슨 문제가 나왔는지는 기억이 잘 나지 않는다(작성일 기준 약 3주가량 지났기 때문). 비록 굉장히 고차원적이고 어려운 증명은 아니었지만 무언가를 받았다는 점에 집중하기로 했다.

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42627분류Heap, SJF(Shortest Job First), Priority Queue시도한 방법문제는가상의 스케줄러를 만드는 일이다.가정에서는 중간중간에 발생하는 Context Switching에 걸리는 시간이 없다고 명시되어 있으므로, 단순히 작업하는 데 걸리는 시간의 총합을 반환하면 된다. 문제의 핵심은 잔여시간이 긴 작업이 처리되고 있을 경우, 다른 작업들은 계속 기다리기만 해야 한다는 점이다.이 부분은 전체 turn-around time을 크게 저해할 수 있으므로, 모든 작업이 끝났을 때 완료까지 걸리는 시간이 가장 짧은 작업을 우선해서 처리해야 한다고 해석할 수 있다.위 구조..

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/17684분류구현, 해시, 문자열시도한 방법초기에 모든 알파벳을 인덱스에 순차대로 담아 사전을 초기화한다.이후 버퍼에 대상 문자열의 한 글자씩 담고, 사전에 없을 경우 색인에 추가하며 버퍼를 flush하며 대상 문자열의 인덱스를 한 칸씩 밀어준다.위 과정을 마치고 나면 answer에 방금 검색된 색인을 담아 전달한다. 방향성 자체는 맞았지만, GPT 리팩토링 결과 몇 군데 지적받았다. 색인에 등록할 때는 탐색의 용이함을 확보하기 위해 한 글자씩 등록된 부분에 vector로 색인을 추가했지만, map 컨테이너에 내장된 find 함수를 사용하므로 굳이 리스트로 구현할 필요가 없었다.map> -> ..
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/12927분류구현, 우선순위, 그리디 알고리즘시도한 방법문제에서 원하는 야근 피로도는 남은 작업양의 제곱합으로 구한다. 제곱은 대상 수가 클수록 더 빠르게 커지므로, 작업 개수 자체가 줄어드는 것 보다 각 작업의 남은 시간을 최대한 균일하고 적게 만드는 편이 제곱합을 줄이는 더 좋은 방법이다. 단순하게 남은 시간만큼 루프를 돌며 가장 큰 값에서 1씩 감산하는 방법을 선택했다.남은 작업량을 대상으로 Priority Queue를 사용하면 항상 가장 많이 남은 작업이 맨 앞으로 오기 때문에, 루프를 돌면서 Priority Queue의 맨 앞 작업이 1씩 감산하게 작성했다. 한 Epoch당 남아있는 ..