전체 글12 [프로그래머스 레벨3] 42579 베스트앨범 (Java) 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42579풀이이 문제의 본질은 정렬 문제로 알고리즘 자체는 어렵지 않지만, 지켜야 할 조건이 많아 다소 난해한 문제입니다. 문제의 앨범 곡 수록 조건은 다음과 같습니다.속한 노래가 많이 재생된 장르를 먼저 수록한다.장르 내에서 많이 재생된 노래를 먼저 수록한다.장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록한다.장르마다 노래는 최대 2곡까지만 수록한다.정리하면, 각 노래에 고유 인덱스를 부여한 뒤 위 규칙대로 정렬하고, 그 순서대로 인덱스를 출력하면 되는 문제입니다.풀이는 장르를 정렬하고(조건 1) → 각 장르 안에서 노래를 정렬하고 (조건 2·3) → 장르별로.. 2026. 6. 1. [프로그래머스 레밸2] 42578번 의상 (Java) 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42578문제 요약코니가 입을 수 있는 의상의 경우의 수를 구하는 문제입니다.풀이입을 수 있는 의상의 모든 경우의 수를 구하려면 각 의상 종류의 갯수들을 곱하면 됩니다.예) 얼굴 의상 수 * 상의 의상 수 * 하의 의상 수 = 입을 수 있는 모든 경우의 수 그러나 특정 의상을 입지 않는 경우도 경우의 수에 포함시켜야 하므로(예를들어 얼굴, 상의 입고 하의 안입는 경우) 각 의상에 1을 더하여 곱해줍니다.예) (얼굴 의상 수 + 1) + (상의 의상 수 + 1)* (하의 의상 수 + 1) = 특정 의상을 입지 않는 경우가 반영된 경우의 수 문제의 조건에서 아무것도 입지 않는 경우는 허용하지 않으.. 2026. 5. 28. [프로그래머스 레밸2] 42577번 전화번호 목록 (Java) 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42577문제 요약전화번호부에서 한 전화번호가 다른 전화번호의 접두어인 경우에 false를 반환하고, 그렇지 않을 경우 true를 반환하는 함수를 작성하는 문제입니다.풀이전화번호 개수의 최댓값이 100만 이므로 모든 전화번호를 서로 대조하며 접두어 관계를 검사하는 방식은 시간 복잡도가 O(N²)이 되어 시간 초과를 유발하므로 사용할 수 없습니다. ( 100만 * 100만 = 1조, 시간초과) 전화번호부의 각 전화번호는 문자열 형태이므로, 전화번호부 정렬 후 접두어 관계에 있는 전화번호들은 문자열 정렬 관계에 의해 반드시 인접하게 됩니다. 그 후 전화번호부를 순회하며 인접한 두 문자열을 비교하는.. 2026. 5. 28. [프로그래머스 레벨1] 1845번 폰켓몬 (Java) 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/1845 문제 요약전체 폰켓몬 N 마리 중, N/2 마리를 골랐을 때, 가질 수 있는 가장 많은 종류의 값을 구하는 문제입니다.풀이전체 폰켓몬 N/2 마리 중 가장 많은 종류의 폰켓몬을 고르는 것이므로 종류의 최대값은 N/2을 넘을 수 없습니다(고른 N/2 마리가 전부 다른 종류일 경우가 가장 많이 고른 것임).그리고 전체 폰켓몬의 종류의 수를 X라고 했을때 X가 N/2보다 작다면, 고를 수 있는 종류의 최대값은 X를 넘을 수 없습니다(아무리 잘 골라도 전체 폰켓몬 종류보다 많은 종류를 고를 수 없음). 따라서, 전체 폰켓몬 종류 수 X를 구한 후, X와 N/2 중 더 작은 값이 -> N/2 .. 2026. 5. 28. [프로그래머스 레벨1] 42576번 완주하지 못한 선수 (Java) 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 요약참가자 목록과 완주자 목록이 주어집니다. 참가자이지만 완주자에는 포함되지 않는 한 사람의 이름을 구하는 문제입니다.풀이참가자(participant) 목록에서 완주자(completion) 목록의 원소들을 지웠을 때, 참가자 목록에 남은 하나의 원소가 완주하지 못한 선수입니다. 입력으로 받은 참가자와 완주자 배열을 완전탐색으로 처리하면, 한 참가자 당 모든 완주자 배열을 순회해야 하므로 시간복잡도가 O(N²) 이 되어 10만(최대 참가자 수.. 2026. 5. 28. 실시간성이 중요한 게임 서버 구현에 C++을 사용하는 이유 과거 게임서버 구현은 C++을 사용하여 구현하는 경우가 대부분이었지만, 최근 모바일 류 게임들 중 실시간성이 중요하지 않은 경우, 개발 생산성과 인력 수급에서 유리한 C#, Java 등을 사용하여 서버를 구현하는 경우가 늘고 있습니다.그러나 MMORPG 같이 실시간성이 중요한 경우, 여전히 C++로 서버를 구현하는 경우가 많습니다. 턴제, 방치형 게임처럼 서버가 사용자의 요청(사용자 이벤트)이 왔을 때만 일을 하면 되는 경우에는 실시간성이 크게 중요하지 않으며, 이러한 서버를 이벤트 기반 서버라 부릅니다. MMORPG처럼, 서버가 사용자의 요청이 없어도 계속해서 플레이어 위치, 충돌 여부 판정 등을 계산하는 경우에는 실시간성이 크게 중요하며, 이러한 서버를 Tick 기반 서버라 부릅니다. 오늘은 개발 생.. 2026. 5. 26. 이전 1 2 다음