전체 글 277

조이스틱 [자바]

🧫 문제 분석✔️ 출처조이스틱 level 2📖 문제 탐욕법인데 정말 어려웠다.   먼저 알파벳 변경은 매우 쉽다. 주어진 알파벳 - 'A' (앞으로 가는 경우) 와  'Z'  - 주어진 알파벳 + 1 (뒤로 가는 경우)최솟값을 answer에 다 더해주면 된다.   문제는 커서 이다. 시계 방향, 반시계 방향으로 인덱스 돌리는게 도무지 떠오르지 않아서 삽질을 엄청했다. 배열에서 두 인덱스 사이의 거리 최솟값시계방향, 반시계 방향의 최솟값을 찾으면 된다.// a b 인덱스 ,n은 배열의 크기// 반시계방향 시계방향Math.min((a - b + n) % n, (b - a + n) % n));  어떻게 해서든 풀어보자는 마인드로 문자 길이가 20인걸로 보아 백트래킹 써도 되겠다 싶..

programmers 2025.02.14

가장 큰 정사각형 찾기 [자바]

🧫 문제 분석✔️ 출처가장 큰 정사각형 찾기 level 2📖 문제 2번 시도후 푼 문제다. 1차 시도 정 사각형을 찾는게 문제인데 처음에는 1차원 배열에 각 열에 대한 개수를 세서최솟값을 갱신하면서 카운트를 하고최솟값과 카운트 값이 같다면 가장 큰 정사각형 후보로 넣는 식이였다.당연히 틀렸고, 시간초과났다.  2차 시도문득 생각해보니 DP에 대해 배웠을 때 값을 누적하고 원하는 부분의 값을 얻는 방법이 떠올랐다.dp[i][j] - dp[i-1][j] - dp[i][j] + dp[i-1][j-1] 여기에 정사각형 한 변의 길이를 더해주고 영역 값을 구한 뒤  정사각형 넓이 == 영역 값  ? 한 변 길이 + 1 , 정사각형 넓이 최신화  이런식으로 하면 되지 않을까 라는 생각에 해봤는데 성공했다. 정사..

programmers/Lv 2 2025.02.13

디펜스 게임 [자바]

🧫 문제 분석✔️ 출처디펜스 게임 level 2📖 문제 우선순위 큐를 사용한 탐욕법(그리드) 알고리즘 문제이다.  내가 생각한 방법1 ~ k번째까지는 무적권을 사용한다 가정하고 우선순위 큐에 넣는다.이때 최댓값을 저장한다.  2가지 경우 무적권 사용 라운드를 바꾼다. 현재 라운드의 적 수 >= 무적권을 사용한 라운드의 최대 적 수 현재 라운드의 적 수 > 무적권을 사용한 라운드의 최소 적 수 이 두가지를 만족하면서 최소 적수를 n에서 뺐을때 0미만이 안될때 무적권 사용 라운드를 바꾼다.그리고 최댓값을 갱신한다.   위 2가지 경우가 아니라면 남은 n 명이 현재 라운드 수보다 크거나 같으면 빼주어 현재 라운드를 막는다.  🔅 문제 풀이import java.util.*;class Solution { ..

programmers/Lv 2 2025.02.11

테이블 해시 함수 [자바]

🧫 문제 분석✔️ 출처테이블 해시 함수 level 2📖 문제 매우 간단한 구현문제 다만 4번 항목이 헷갈렸다.모든 S_i를 누적하여 bitwise XOR 한 값을 해시 값으로 반환S_i를 누적합한다음 XOR 하라는 건가? 싶은데 그건 또 아닌거같아서 1번 데이터와 2번 데이터를 XOR 연산 후그 데이터를 또 3번 데이터와 XOR 연산 .. 이런식이다.  🔅 문제 풀이import java.util.Arrays;class Solution { // 해시 함수 매개변수 col, row_begin, row_end // col 번째 컬럼 기준 오름차순 , 같다면 기본키(첫번째 컬럼) 기준 내림차순 // 정렬후 S_i를 i 번째 행의 튜플에 대해 각 컬럼 값을 i로 나눈 나머지들의 합으로 정의 ..

programmers/Lv 2 2025.02.11

행렬 테두리 회전하기 [자바]

🧫 문제 분석✔️ 출처행렬 테두리 회전하기 level 2📖 문제 현재 좌표에서 이동하는 문제다.1~row*columns 까지 이중 배열에 숫자를 각 넣어주고 그래프 탐색처럼, 이동 방향을 정하는 배열을 만든다. 이동 방향은 시계 방향 즉, 좌 하 우 상 순으로 움직인다. 이를 코드로 짜면 아래처럼 된다.  // 좌,하,우,상 int[] dy = {0, 1, 0, -1}; int[] dx = {1, 0, -1, 0};  방향을 정하고 주어진 queries의 좌표값 만큼 이동하면 된다. 주의할 점은 문제에서 queries 각 행은 [x1, y1, x2, y2] 로 주어지는데 x1행 y1열 이다. x2 - x1, y2 - y1 만큼 방향으로 이동하면서 이전 값을 넣어주고 기존 값을 따로 저..

programmers/Lv 2 2025.02.11

ENUM - 열거형

자바 공부가 너무 처참해서 다시 공부하기로 했다.이번에는 내가 제일 모르는 ENUM에 대해서 많이 찾아보고 직접 쳐보고 배운 것을 정리하겠다.   ENUM이란?열거, 목록 등으로 상수들의 집합이다.  보통 상태를 표현할 때 많이 쓰는 것 같다. (대부분 배송 상태, 날짜 등으로 예제를 갖는다.) ENUM이 있기 전에는 private static final 자료형 상수명  이런 식으로 많이 사용했지만 ENUM이 있으니 ENUM을 사용하면 된다.  왜 사용하는가 ?type-safety(타입 안정성) 보장단순성, 가독성 upENUM은 싱글톤 객체변경 범위 최소화컴파일 에러 (체크 에러)switch 문 사용 가능 사용 방법enum Season { SPRING, SUMMER, AUTUMN, ..

JAVA 2025.02.10

백준 1022번 : 소용돌이 예쁘게 출력하기 [자바]

🧫 문제 분석✔️ 출처소용돌이 예쁘게 출력하기 골드 3 📖 문제좌표 (0,0) 에서 시작해서 상하좌우로 이동한다. 이동 방향은→ ↑ ← ↓ 이렇게 반시계방향이며이동 거리는 1에서 시작해서2번 방향을 전환하면 이동거리는 1씩 증가  이동 한 좌표를 갱신하면서 현재 위치가 문제에서 주어진 r2,r1,c1,c2 박스 범위 안에 있는지 확인한다.범위 안에 있다면 그 위치에 숫자를 넣어주면 된다. (숫자는 이동할때마다 1씩 증가) 문제는 r1,c1,r2,c2가 -5000 ~ 5000까지 범위인데우리가 만드는 배열들은 음수 인덱스 표현이 안된다. 이렇게 시작지점을 0,0으로 끌어당겨야한다. arr[현재 위치r - r1] [현재 위치c - c1] 로 인덱스에 접근하면 r1, r2가 0,0으로 맞춰져서 배열 안 범..

baekjoon 2025.02.04

다리를 지나는 트럭 [자바]

🧫 문제 분석✔️ 출처다리를 지나는 트럭 level 2📖 문제 2번 재시도 끝에 풀은 문제다.  처음 시도에는 다리 위에 올라간 트럭이 경과한 시간을 잘 못 설계해서 계속 틀렸다.  두 번째 시도는 조건문 하나를 추가하지 않아서 틀렸었다. 4,5,6,9번  다리위에 있는 트럭을 제거해야하는 경우의 수는1. 다리에 트럭이 현재 올라갈 수 있는 트럭 최대 갯수만큼 있는 경우2. 새로운 트럭이 올라간다 했을 때 무게 하중을 넘어가는 경우3. 위 두 경우와는 별개로 다리의 맨 앞 트럭이 다리를 다 건너(시간이 지나) 빠져나가는 경우 이 세가지 경우에 대해서 트럭을 잘 빼준다면 문제없이 쉽게 풀 수 있을 것이다.  나는 3번을 안해서 계속 틀렸었다.. 🔅 문제 풀이import java.util.*;class..

programmers/Lv 2 2025.02.04

백준 20207번 : 달력 [자바]

🧫 문제 분석 ✔️ 출처20207번 달력 골드 5 📖 문제 열 : 365 + 2 (1부터 365까지, 그리고 마지막에 값이 남은채로 계산되는 거 방지용)행 : 중복 일정 가능성 1000개높이 배열 하나 생성 입력 값은 시작 날짜가 빠른 순, 같다면 길이가 긴 순으로 오름차 정렬→ 근데 시작 날짜가 빠른 순으로 해도 된다. 일정에 각 날짜 기간 저장, 중복이라면 현재 행 + 1에 날짜 기간 저장0 행에는 중첩 날짜를 이어서 저장높이 배열에는 각 날짜의 높이 최댓값을 저장 그리고 0행의 일정을 쭉 탐색해서 길이를 구하고 최대 높이를 구한다음 길이 * 높이를 더해 코팅지 면적을 구한다. 🔅 문제 풀이import java.io.*;import java.util.*;public class Main { ..

baekjoon/Greedy 2025.02.03

미로 탈출 [자바]

🧫 문제 분석✔️ 출처미로 탈출 level 2📖 문제 단순 BFS이며,레버를 당기고 난 후 출구로 나갈 수 있으며레버를 당기지 않아도 출구 지역은 지나다닐 수 있고모든 지점은 여러 번 지나갈 수 있다.  나는 출발점을 찾고 거기서 부터 BFS로 L를 탐색한다음현재 위치에서 다음 위치가 레버이면서 아직 레버를 안당겼다면여태까지 방문한 기록을 없애고, 큐를 초기화 시킨 다음 레버를 당기고(레버 위치를 큐에 담고), 레버 위치에 방문했다고 표시한다. 그리고 레버 위치에서부터 시작하게끔 현재 위치에서 탐색을 중지시킨다.(break)레버 위치에서부터 다시 BFS 탐색을 해서 E인 탈출구를 찾는다. 🔅 문제 풀이import java.util.*;class Solution { // 1. 레버로 이동 ..

programmers/DFS-BFS 2025.02.03