Banner

My Tech Blog (프로그래머스)

오늘의 명언
📑 1. 문제설명💡 2. 풀이 과정문제 예시처럼 5*5 격자가 있다고 가정 해 보면 격자의 가장 아래 칸부터 인형이 차곡차곡 쌓여 있고, 가장 위에 있는 인형을 집어 올릴 수 있다. 이 문제에서 "집어 올린 인형은 바구니에 쌓이는데 바구니의 가장 아래 칸부터 인형이 순서대로 쌓인다."라는 부분을 보면 스택 문제인 걸 바로 알 수 있다. 게임화면이나 바구니를 스택이라고 생각하면 된다. 문제는 board 배열을 스택으로 변환시키는 것이 어렵다. 만약에 값이 0이 들어오면 빈 칸이기 때문에 스택에 넣지 않는다. 그리고 크레인이 인형을 꺼내는 것은 stack.pop()으로 구현할 수 있다. 인형뽑기 게임 로직 1. 바구니가 빈 경우 -> 무조건 푸시2. 바구니가 비지 않은 경우  2-1. 바구니의 가장 위에..
📑 1. 문제설명💡 2. 접근방식 1. 평일 체크startday를 기준으로 평일(월~금)의 인덱스를 isWeekday 배열에 저장한다. (틀림) - 인덱스가 고정됨startday + j를 통해 현재 요일을 직접 계산해서 startday에 따라 요일이 동적으로 변하게 해야 한다. % 7 연산으로 월금(15)만 검사하고 주말(0,6)은 출근시간 체크에서 제외하도록 한다.2. 직원별 출근 기록 확인schedules[i] + 10을 기준으로 평일의 출근 기록을 확인한다. - 이 때 시간이 60분이 넘어가는 경우 +40을 해서 HHMM맞게 시간이 표시될 수 있도록 정확한 시간 보정을 해 준다. 하나라도 지각한 경우(출근 시각 > 인정 시각), 해당 직원은 상품을 받을 수 없다.모든 평일을 지각하지 않았다면..
📑 1. 문제설명💡 2. 풀이 과정일단 문제가 길어도 너무 길어서 나름대로 요약을 해 봤다. record 배열은 입장 또는 퇴장 정보를 담고 있는 2차원 배열이다.  입장은 ["Enter id 닉네임"] → "닉네임님이 들어왔습니다."퇴장은 ["Leave id"] → "닉네임님이 나갔습니다."닉변은 ["Change id 닉네임"]record0번 인덱스 = 행동(입장/퇴장/닉변)1번 인덱스 = id2번 인덱스 = 닉네임 여기서 중요한 것은 채팅방에 보여지는 메세지에는 최종적으로 변경된 닉네임이 보여져야 한다는 것이다. 그렇다면 한 아이디가 가장 마지막으로 사용한 닉네임이 무엇인지 조회하고 메세지를 보여줄 때 아이디값을 그 닉네임으로 바꾸는 방법으로 문제를 해결해야 한다. 닉네임 정보를 저장하기 위해서 ..
📑 1. 문제설명 💡 2. 정답코드🙅🏻‍♀️ 첫 번째 시도 - 틀림 ❌프로그래머스 콘솔이 자동완성이 안 되기 때문에 생각나는데로 써서 많이 틀렸다.class Solution {    public String solution(String str1, String str2) {        StringBuilder sb = new StringBuilder();        for(int i = 0; i   오답 정리⭐ str1.length → str1.length() length는 배열에서 사용되고, 문자열에서는 length() 메서드를 사용한다. ⭐  sb.add(...) → sb.append(...)StringBuilder는 add() 메서드가 없고, 대신 append()를 사용해야 한다.⭐  st..
그리디 알고리즘(Greedy Algorithm)개요greedy형용사 - 1. 탐욕스러운 2.욕심 많은  그리디 알고리즘(Greedy Algorithm)은 매 순간 가장 최적이라고 판단되는 선택을 반복하여 최종 해답을 구하는 알고리즘이다. 즉, 현재 단계에서의 최선의 선택이 최종적으로도 최적해(Optimal Solution)가 된다고 가정하고 문제를 해결한다. 코딩테스트에서 만날 경우 사전에 외우고 있지 않아도 풀 수 있는 가능성이 높은 문제 유형지역 최적해(Local Optimum) → 전역 최적해(Global Optimum) 보장 가능해야 함탐욕적 선택(Greedy Choice)과 최적 부분 구조(Optimal Substructure) 만족✅ 동적 프로그래밍(Dynamic Programming)과 차이..
📑 1. 문제설명 입출력 예 설명  💡 2. 접근방식이 문제는 저번에 풀었던 단속카메라 문제와 비슷하다.  [프로그래머스] (Java) 단속카메라 (그리디/Greedy)📑 1. 문제설명💡 2. 접근방식입출력 예로 주어진 route 배열을 막대그래프로 그려 봤다. 최소한의 카메라를 배치해야 하므로 구간 종료 위치를 기준으로 오름차순 정렬 차량이 구간에서 카메라awesomepossum.tistory.com 예시 그래프는 각 미사일을 끝점 e 기준으로 오름차순 정렬시킨 모양이다.그래프에서 (3,7)와 (4,8)은 순서가 잘못되었는데 오류로 추정된다.단속카메라 문제와 요격시스템 문제의 차이는 끝점 포함 여부이고 둘 다 그리디 알고리즘으로 해결하면 된다. 문제 풀이 방법배열을 끝점 기준으로 오름차순 정렬각..
📑 1. 문제설명💡 2. 접근방식자료 만들 생각에 벌써부터 피곤하다. 하하하 문제 풀이에 앞서, 명색이 그래프 문제인 만큼 그래프에 대해 간략히 설명하고자 한다.2-1. 그래프의 구조노드: 원(circle)으로 표시하고, 숫자로 번호를 적는다.간선: 노드를 연결하는 선(segment)으로, 모든 간선이 양방향임을 보여주기 위해 화살표 없이 직선으로 그린다.return 하고자 하는 값은 1번 노드에서 가장 멀리 떨어진 노드의 수 이다.즉 1번 노드에서 다른 노드들로 이동하는 최단 거리를 계산해서 최단 거리가 가장 먼 노드들이 몇 개인지를 구해야 한다. 2-2. 해결 방법(1) 인접 리스트로 그래프 만들기 List> graph = new ArrayList(); 예를 들어 문제에서 제시된 vertex ..
📑 1. 문제설명💡 2. 접근방식n명의 선수가 있을 때, 각 선수는 모든 다른 선수와 경기를 하여 n-1번의 승패를 기록한다.즉, 전체 승패 결과만 있으면 각 선수의 상대적 위치를 정확히 판단해서 순위를 확정 할 수 있다. 승패를 통해 순위를 결정하는 방법은 간단히 말하면 모든 선수들 간의 직접적인 경기 결과를 반영하는 것이다. 예를 들어, 선수 i와 선수 j가 경기를 하여 승패가 결정되면, 그 결과를 기록한다.  플로이드 워셜(Floyd-Warshall) 알고리즘모든 쌍 최단 경로(all-pairs shortest path)를 구하는 알고리즘으로 그래프의 모든 노드 쌍에 대해 가장 짧은 경로를 찾는 알고리즘이다. 이 알고리즘을 사용하면 그래프의 모든 노드에 대해 다른 모든 노드로 가는 최단 경로를 ..
상단으로