분류 전체보기 280

단어 변환 [자바]

🧫 문제 분석✔️ 출처단어 변환 level 3📖 문제 begin 알파벳 중 하나를 words 단어중 하나의 알파벳으로 바꿀 수 있다.순서는 상관없고, 변경을 최소한으로 해서 target을 만들면 된다.   백트래킹하면서 words를 탐색한다.  words 각 단어의 알파벳을 begin의 각 알파벳과 비교해서 2개이상 다르면 바꾸지 않고 넘어가도록 한다.  만약 알파벳이 1개만 다르다면 그 단어를 begin으로 하고백트래킹 탐색을 한다. 🔅 문제 풀이class Solution { // 완전탐색 // 백트래킹 boolean[] visited; int min = Integer.MAX_VALUE; public int solution(String begin, Str..

programmers/Lv 3 2025.02.19

야근 지수 [자바]

🧫 문제 분석✔️ 출처야근 지수 level 3📖 문제 약간 탐욕법 문제인듯하다.Demi가 퇴근까지 N시간 남았고, 그 시간안에 남은 작업량(works)를 적절히 분배해서 작업을 하여 야근 피로도가 최소가되게 즉, S={w^2 ∣ w∈works} 이 최솟값이 되게 하면 된다.   예시 1번을 보면 4,3,3 이 남은 작업량, n이 퇴근까지 4시간 남았다.야근 피로도는 제곱이기에 값이 매우 커진다. 따라서 남은 작업량들을 균등하게 만들어야한다.  works[0] - 2, works[1] - 1,  works[2] - 1= 2, 2, 2이렇게 분배하여 최솟값을 구하면 된다.   풀이 정리해당 문제는 배열로 풀면 좋을 것 같아서 배열로 풀어보았다.각 works의 값을 인덱스로 하고 개수를 카운팅한 뒤 max..

programmers/Lv 3 2025.02.19

PCCP 기출문제 : 2번 / 퍼즐 게임 챌린지 [자바]

🧫 문제 분석✔️ 출처[PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 level 2📖 문제 이진 탐색 문제다. 그런데 이진탐색을 했더니 시간초과나서 다른 방법을 찾아서 삽질을 하고 식을 제대로 세우고 이진탐색으로 풀었다. 문제에서 주어진 조건을 식으로 풀어보면 아래와 같다. limit >= (diff[i] - level) * (time_cur[i] + time_prev[i]) + time_cur[i] 이를 만족하는 level 최솟값을 찾으면 된다.  좀만 더 간단히하면문제에서 diff - level 번 만큼 이전 문제를 다시 풀고(time_prev) + 현재 문제를 다시 풀어야한다(time_cur) diff-level 번 틀린 후 다시 풀면 time_cur만큼 시간을 사용한다.  즉, limit - ..

programmers/Lv 2 2025.02.15

조이스틱 [자바]

🧫 문제 분석✔️ 출처조이스틱 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