전체 글 217

프로그래머스: 단어변환(JAVA)

✅ 문제 요약입력시작 단어 begin목표 단어 target단어 목록 words (변환 가능한 단어 리스트)조건한 번에 한 글자만 변경 가능변경된 단어는 모두 words 안에 있어야 함출력최소 변환 단계 수변환 불가능할 경우 0✅ 접근 방식 - BFS (너비 우선 탐색)단어들을 노드로 보고, 한 글자 차이 나는 단어끼리 간선을 연결한 그래프로 생각할 수 있습니다. 이 그래프에서 시작 단어부터 목표 단어까지의 최단 경로를 찾는 문제로 바뀌며, 이는 BFS로 효과적으로 해결할 수 있습니다.✅ Java 코드import java.util.*;class Solution { public int solution(String begin, String target, String[] words) { if ..

Algorithm 2025.05.08

프로그래머스: 게임 맵 최단거리(JAVA)

문제 설명1은 이동 가능한 칸, 0은 벽입니다.(0,0)에서 시작해서 (n-1, m-1)까지 최단 경로를 구합니다.이동은 상하좌우 4방향만 가능하며, 한 번 이동 시 1칸입니다.풀이 전략 - BFS이 문제는 최단 거리를 구하는 문제이기 때문에, BFS(너비 우선 탐색)로 접근해야 합니다. DFS는 경로를 모두 탐색할 수는 있지만, 최단 거리 보장은 되지 않습니다.핵심 포인트:방문한 노드는 visited로 체크maps[x][y] 값을 업데이트해서 거리 정보로 활용목적지 도달 전에 경로가 없다면 -1을 반환JAVA 코드import java.util.*;class Solution { static int[] dx = {1, -1, 0, 0}; // 하, 상 static int[] dy = {0..

Algorithm 2025.05.02

프로그래머스: 네트워크(JAVA)

문제 설명네트워크란 컴퓨터 상호 간에 정보를 주고받을 수 있도록 연결된 형태를 의미합니다.예를 들어 컴퓨터 A와 B가 직접 연결되어 있고, B와 C가 연결되어 있다면 A와 C도 간접적으로 연결되어 하나의 네트워크라고 할 수 있습니다.즉, 하나의 네트워크는 연결된 컴퓨터들의 집합이라고 볼 수 있습니다.✔ 입력컴퓨터 개수 n (1 ≤ n ≤ 200)인접 행렬 형태의 연결 정보 computers[n][n]computers[i][j] == 1 이면 i번과 j번 컴퓨터가 연결되어 있음computers[i][i] == 1 (항상 자기 자신은 연결되어 있음)✔ 출력네트워크의 개수 접근 방법모든 컴퓨터를 순회하면서아직 방문하지 않은 컴퓨터에서 BFS(또는 DFS)를 시작BFS를 통해 하나의 네트워크에 속한 컴퓨터들을 ..

Algorithm 2025.05.02

프로그래머스: 전력망을 둘로 나누기(JAVA)

문제 요약전력망을 이루는 송전탑들이 트리 형태로 연결되어 있고, 이 중 하나의 전선을 끊어서 전력망을 두 개로 나누려고 합니다.이때, 두 전력망에 속한 송전탑의 개수 차이를 가장 작게 만드는 것이 목표입니다.송전탑 개수 n: 2 이상 100 이하전선 정보 wires.length == n - 1 접근 방법주어진 간선 중 하나를 끊는다.끊은 후 하나의 서브트리의 크기를 BFS로 구한다.전체 송전탑 수 n에서 해당 크기를 빼면 나머지 서브트리 크기를 알 수 있다.두 개의 송전탑 개수 차이를 절댓값으로 비교하여 최솟값 갱신한다. JAVA 코드import java.util.*;class Solution { static int[][] map; static boolean[] visited; ..

Algorithm 2025.05.02

백준 1987번:알파벳

문제 설명크기 R × C 보드판이 주어집니다.보드는 알파벳 대문자로 채워져 있습니다.(0,0)에서 출발하여 인접한 네 방향(상하좌우)으로만 이동할 수 있습니다.이미 지나온 알파벳은 다시 밟을 수 없습니다.밟을 수 있는 최대 칸 수를 구하세요.문제 해결DFS(깊이 우선 탐색)으로 모든 경로를 탐색하면서,이미 방문한 알파벳을 Set로 관리합니다.새로운 알파벳을 만날 때만 다음 칸으로 이동하고,이동 후에는 백트래킹으로 알파벳을 다시 제거하여 다른 경로 탐색에 영향을 주지 않도록 합니다.JAVA 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashSet;impor..

Algorithm 2025.05.02

프로그래머스: 카펫

문제 설명Leo는 노란색과 갈색으로 구성된 카펫을 보았습니다.갈색은 테두리, 노란색은 가운데 영역을 의미합니다.이때, brown(갈색 칸 수)와 yellow(노란 칸 수)가 주어졌을 때카펫의 가로와 세로 크기를 구하는 문제입니다.제한 조건brown: 8 이상 5000 이하yellow: 1 이상 2,000,000 이하가로(width) ≥ 세로(height)✅ 핵심카펫은 다음과 같은 구조를 가집니다:전체 격자 수 = brown + yellow가로(width), 세로(height)노란 영역 = (가로 - 2) * (세로 - 2)갈색 영역 = 전체 - 노란 영역즉, 다음 조건을 만족하는 가로, 세로 쌍을 찾아야 합니다:(width * height) == brown + yellow(width - 2) * (hei..

Algorithm 2025.04.30

프로그래머스: 등굣길(JAVA)

문제 설명어떤 도시에는 집과 학교가 있고, 학생은 집에서 학교까지 가장 빠른 길로 가려고 한다. 도시의 지도는 m(가로), n(세로) 크기의 격자 형태로 구성되어 있으며, 학생은 항상 오른쪽 또는 아래쪽으로만 이동할 수 있다.그런데 지도에는 물에 잠겨서 지나갈 수 없는 지역들이 있으며, 해당 지역들은 puddles 배열에 좌표로 주어진다.당신은 이 학생이 집 (1, 1)에서 학교 (m, n)까지 갈 수 있는 최단 경로의 개수를 구해야 한다. 단, 경로의 개수가 매우 클 수 있으므로, 정답을 1,000,000,007로 나눈 나머지를 반환해야 한다.입력값m: 격자의 가로 크기 (1 ≤ m ≤ 100)n: 격자의 세로 크기 (1 ≤ n ≤ 100)puddles: 물에 잠긴 지역들의 좌표가 담긴 2차원 배열각 ..

Algorithm 2025.04.24

프로그래머스: N으로 표현(JAVA)

문제 설명숫자 N과 목표 숫자 number가 주어졌을 때, N을 최대 8번만 사용하여 사칙연산(+ - * /)과 숫자 이어 붙이기(N, NN, NNN 등)만으로 number를 만들 수 있는 가장 작은 횟수를 구하는 문제입니다.예: N = 5, number = 12일 때→ 5 + 5 + (5 / 5) = 11은 안 되고,→ 55 / 5 + 2 = 13도 안 되고,→ 5 * 2 + 5 + (5 / 5) = 12 같은 식으로 다양한 조합이 가능합니다.💡 풀이 - DP + Set 활용✅ 핵심 포인트dp[i]는 N을 i번 사용해서 만들 수 있는 모든 숫자 집합입니다.i를 1부터 8까지 순회하며 가능한 연산 조합을 모두 저장합니다.각 단계에서 목표값이 등장하면 바로 i를 리턴합니다.Java 코드import jav..

Algorithm 2025.04.24

프로그래머스: 정수삼각형(JAVA)

문제 설명정수 삼각형이 주어졌을 때, 꼭대기부터 바닥까지 이동 가능한 경로 중 숫자의 합이 가장 큰 값을 구하는 문제입니다.삼각형은 다음과 같이 구성되어 있으며, 한 칸 아래 또는 대각선 아래로만 이동할 수 있습니다. [7] [3, 8] [8, 1, 0] [2, 7, 4, 4] [4, 5, 2, 6, 5]​예를 들어 7 → 3 → 8 → 7 → 5 경로의 합은 30입니다. 이처럼 가능한 모든 경로 중 최댓값을 구하는 것이 목적입니다.접근 방식 - Bottom-Up DP이 문제는 동적 계획법(DP) 으로 풀 수 있습니다. 위에서부터 내려오는 방식도 가능하지만, 아래에서 위로 올라가는 Bottom-Up 방식이 훨씬 간단합니다.✅ 핵심 아이디어마지막 줄부터 시작하여, 위로 올라가며 ..

카테고리 없음 2025.04.24

SQL Injection이란?

SQL Injection이란?SQL Injection은 클라이언트가 입력한 데이터에 악의적인 SQL 구문을 삽입하여, 백엔드 데이터베이스를 조작하거나 불법적으로 데이터를 조회/변경하는 공격 방식입니다.공격자는 사용자의 입력값을 통해 의도치 않은 SQL문을 실행시키는 것이 핵심입니다.공격 원리보통 다음과 같은 코드가 있을 때:String query = "SELECT * FROM users WHERE username = '" + inputUsername + "' AND password = '" + inputPassword + "'";inputUsername이나 inputPassword에 아래와 같은 값을 입력하면?username: ' OR '1'='1password: ' OR '1'='1최종 SQL문은 ..

DataBase 2025.04.23