본문 바로가기

프로그래머스(Java)/Level 2

(51)
[프로그래머스] 오픈채팅방 코드 힌트유저 정보 관리:사용자 ID와 닉네임을 관리하기 위해 HashMap을 사용합니다.이 맵은 각 사용자의 최신 닉네임을 저장하며, 나중에 메시지를 생성할 때 이를 사용하여 정확한 닉네임을 표시합니다.행동 기록 및 메시지 생성:사용자의 행동(Enter, Leave, Change)을 시간 순서대로 처리하여 각 행동에 맞는 메시지를 기록합니다.Enter와 Leave는 메시지를 생성하여 리스트에 추가하고, Change는 해당 ID의 닉네임만 업데이트합니다.닉네임 변경 처리:Change 동작이 발생할 때마다 HashMap에서 해당 사용자의 닉네임을 업데이트합니다.이 업데이트는 이전에 기록된 메시지의 닉네임에도 반영되기 때문에, 메시지 생성 시 올바른 닉네임이 사용됩니다.최종 메시지 배열 생성:모든 로그를 처..
[프로그래머스] 택배상자 코드 힌트순서 확인:1번 상자부터 시작하여 order 배열의 원하는 순서대로 상자를 트럭에 싣는 것이 목표입니다.상자를 순서대로 트럭에 실을 수 있는지 확인하며 진행합니다.스택 사용:만약 현재 상자를 바로 트럭에 실을 수 없을 경우, 스택을 사용하여 임시로 상자를 저장합니다.스택은 LIFO(Last In, First Out) 구조를 가지며, 가장 나중에 넣은 상자를 먼저 꺼낼 수 있습니다.스택과 비교:스택에 상자가 쌓인 상태에서, 현재 순서에 맞는 상자가 스택의 맨 위에 있다면, 스택에서 상자를 꺼내 트럭에 실습니다.만약 스택의 맨 위 상자가 현재 순서에 맞지 않으면, 상자를 더 이상 실을 수 없으므로 반복을 종료합니다.결과 반환:최종적으로 트럭에 실을 수 있는 최대 상자 개수를 계산하여 반환합니다.이를..
[프로그래머스] 주차 요금 계산 코드 힌트기록 관리:각 차량의 입차 및 출차 시간을 관리하여, 차량이 얼마나 오랫동안 주차했는지를 계산합니다.출차 기록이 없는 차량은 마지막 시간인 23:59에 자동으로 출차 처리됩니다.요금 계산:차량이 기본 시간 이하로 주차한 경우, 기본 요금만 부과됩니다.기본 시간을 초과한 경우, 추가 시간에 대해 단위 요금을 적용하여 최종 요금을 계산합니다.추가 시간 계산 시, (현재 시간 - 주차 시간 - 기본 주차 시간) / 추가 시간 단위가 소수점으로 나누어떨어지지 않으면 올림 처리를 해야 합니다.입출차 처리:차량이 입차할 때는 해당 차량의 입차 시간을 기록합니다.차량이 출차할 때는 현재 시간과 입차 시간의 차이를 이용해 총 주차 시간을 계산하고 기록합니다.출차가 완료된 후, 차량의 입차 기록은 삭제됩니다.최..
[프로그래머스] 스킬트리 코드 힌트스킬 순서 이해:주어진 skill 문자열은 스킬의 순서를 정의하며, 이 순서대로 스킬을 배워야만 합니다.예를 들어, skill이 "CBA"라면, 스킬 트리에서 C가 먼저, B가 그다음, A가 마지막으로 와야 합니다.필수 스킬 확인:각 스킬 트리(skillTrees)에 대해 필수 스킬들이 올바른 순서로 나열되어 있는지 확인합니다.skill.indexOf(currentSkill)로 현재 스킬이 필수 스킬 목록에 있는지 확인합니다. 만약 포함되지 않았다면 무시합니다.순서 확인:만약 필수 스킬이 올바른 순서로 나타나지 않았다면, 해당 스킬 트리는 유효하지 않다고 판단합니다.스킬 트리의 유효성을 판단한 후, 유효한 스킬 트리의 개수를 증가시킵니다.결과 반환:모든 스킬 트리를 확인한 후, 유효한 스킬 트리..
[프로그래머스] 땅따먹기 코드 힌트문제 이해 및 접근 방식:이 문제는 "땅따먹기"라는 게임을 기반으로 합니다. 각각의 행은 특정 턴에서 선택할 수 있는 네 개의 땅을 나타내고, 각 땅에는 점수가 부여됩니다. 같은 열의 땅은 연속해서 선택할 수 없습니다.목표는 마지막 행에 도달했을 때 얻을 수 있는 최대 점수를 계산하는 것입니다.동적 계획법을 활용한 점수 계산:각 행에서 가능한 최대 점수를 누적하는 방식으로 계산합니다.land[i][j]에는 현재 위치까지의 최대 점수가 저장되며, 이전 행에서 같은 열을 제외한 최대 값을 더해나갑니다.즉, land[i][j]에는 i-1행에서 j열을 제외한 최대 점수가 더해집니다.이동 제한 처리:연속해서 같은 열을 선택할 수 없으므로, j열을 제외한 k열의 최대 점수를 선택해야 합니다. 이를 위해 내..
[프로그래머스] 방문 길이 코드 힌트지도 내에서 길을 추적:캐릭터가 이동할 때, 기존에 걸어본 길인지 여부를 추적하여 처음 지나간 길만 카운트합니다.11x11 크기의 2차원 배열로 맵을 표현하고, 각 좌표에서 4방향(상, 하, 좌, 우)에 대해 길의 방문 여부를 기록합니다.좌표는 원래 -5에서 5까지의 범위를 가지지만, 배열의 인덱스로 사용하기 위해 5를 더해줍니다.양방향 길 처리:예를 들어, (0,1)에서 (1,1)로 이동한 길과 (1,1)에서 (0,1)로 되돌아오는 길은 같은 길로 간주합니다.이를 위해 이동할 때 현재 위치에서 가는 길과 도착한 위치에서의 반대 방향 길을 모두 방문 처리합니다.경계 처리:캐릭터가 맵의 경계를 넘지 않도록 확인합니다. 만약 맵을 벗어난다면 이동을 무시합니다.이동 및 길 방문 처리:캐릭터가 이동할 ..
[프로그래머스] 롤케이크 자르기 코드 힌트문제 이해하기:이 문제의 핵심은 롤케이크를 자를 때, 두 부분에 있는 토핑 종류의 수가 동일한 경우를 찾는 것입니다.롤케이크의 크기나 각 부분의 토핑 개수는 중요하지 않고, 오직 각 부분에 포함된 고유한 토핑 종류의 수가 중요합니다.예를 들어, [1, 1, 1, 1]이 주어졌을 때, 다음과 같은 세 가지 경우가 가능합니다:[1] [1, 1, 1][1, 1] [1, 1][1, 1, 1] [1]자료구조 선택하기:저는 이 문제를 효율적으로 풀기 위해, HashMap을 사용하여 각 부분에 포함된 토핑의 종류와 개수를 추적했습니다.HashMap의 key에는 토핑의 종류, value에는 해당 종류의 토핑 개수를 저장합니다.처음에는 HashSet을 사용하여 각 부분의 고유한 토핑을 추적하려고 했지만, 2중 ..
[프로그래머스] 모음사전 코드 힌트DFS로 풀기 (모든 단어 생성 후 indexOf로 찾기)모든 단어 생성:재귀 함수를 사용해 가능한 모든 단어를 생성하고 리스트에 저장합니다.문자열의 길이가 5를 넘으면 재귀 호출을 중단합니다.길이가 5 이하인 경우, 리스트에 현재 문자열을 추가합니다.각 재귀 호출에서는 "AEIOU"의 각 문자를 문자열에 추가하며, 이 과정을 반복합니다.단어 위치 찾기:모든 단어가 리스트에 저장된 후, 주어진 단어의 위치(index)를 찾습니다.리스트에서의 위치가 곧 해당 단어가 사전에서 몇 번째로 등장하는지 의미합니다.list.indexOf(word)를 사용해 위치를 찾아 반환합니다.문자열을 변환하며 일치하는지 확인하기문자 변환:주어진 단어의 각 문자를 숫자로 변환하여 비교를 단순화합니다."A"는 "1", "..