반응형

알고리즘 37

[자바] 병합정렬 (합볍 정렬) (merge sort) 이란?

병합 정렬 이란?분할 정복 방법을 사용하여 가장 작은 문제로 분리하여 해결한 결과들을 가지고 원래 문제를 해결하는 방법이다.병합 정렬은 이 분할 정복 방법을 사용하여 주어진 배열을 정렬하는 방법으로주어진 배열을 절반으로 나누어 나누어진 배열을 정렬 하는 방법이다.이때 나누어진 배열이 또 나눌수 있다면 이 과정을 더이상 나누지 못할때 까지 반복하는 방법이다.시간 복잡도가 O(n log n) 으로 일반적인 정렬보다 정렬하는 속도가 빠르다.그림으로 설명하면 이걸 코드로 나누어 보면분할 단계 코드 static void mergeSort(int[] list,int left,int right) { //나누는 위치 if(left병합 단계 코드 static void merge(int[] list, int left..

알고리즘 2025.06.12

[백준 자바] 16173번 점프왕 쩰리(small)

문제쩰리’는 점프하는 것을 좋아하는 젤리다. 단순히 점프하는 것에 지루함을 느낀 ‘쩰리’는 새로운 점프 게임을 해보고 싶어 한다. 새로운 점프 게임의 조건은 다음과 같다.‘쩰리’는 가로와 세로의 칸수가 같은 정사각형의 구역 내부에서만 움직일 수 있다. ‘쩰리’가 정사각형 구역의 외부로 나가는 경우엔 바닥으로 떨어져 즉시 게임에서 패배하게 된다.‘쩰리’의 출발점은 항상 정사각형의 가장 왼쪽, 가장 위의 칸이다. 다른 출발점에서는 출발하지 않는다.‘쩰리’가 이동 가능한 방향은 오른쪽과 아래 뿐이다. 위쪽과 왼쪽으로는 이동할 수 없다.‘쩰리’가 가장 오른쪽, 가장 아래 칸에 도달하는 순간, 그 즉시 ‘쩰리’의 승리로 게임은 종료된다.‘쩰리’가 한 번에 이동할 수 있는 칸의 수는, 현재 밟고 있는 칸에 쓰여 있..

[백준 2473 자바] 세 용액

[백준 2473 자바] 세 용액문제여러 종류의 산성 용액과 알칼리성 용액을 보유하고 있다.각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어진다.산용 용액은 1부터 1,000,000,000까지의 양의 정수, 알칼리성 용액의 특성은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다. 같은 양의 세 가지 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다.세 용의 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 할 때0에 가장 가까운 용액을 만드는 세 용액을 찾는 프로그램을 작성하시오. 입력첫째 줄에는 전체 용액이 수 n이 입력된다 n은 3 이상 5000 이하의 정수이다.둘째 줄에는 용액의 특성값을 나타내는 n개의 정수들이 빈값을 사이에 두고 주어진다.모..

[백준 5639 자바] 이진 검색 트리

[백준 5639 자바] 이진 검색 트리문제이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진트리이다.노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다.노드의 오른쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 크다.왼쪽, 오른쪽 서브트리도 이진 검색 트리이다.전위 순회 (루트-왼쪽-오른쪽)은 루트를 방문하고, 왼쪽 서브트리, 오른쪽 서브 트리를 순서대로 방문하면서 노드의 키를 출력한다. 후위 순회 (왼쪽-오른쪽-루트)는 왼쪽 서브트리, 오른쪽 서브트리, 루트 노드 순서대로 키를 출력한다. 예를 들어, 위의 이진 검색 트리의 전위 순회 결과는 50 30 24 5 28 45 98 52 60이고, 후위 순회 결과는 5 28 24 45 30 60 52 98 50이다.이진 검색 트리를..

[자바] Two Pointer 알고리즘

Two Pointer 알고리즘 (투 포인터 알고리즘)개념투 포인터 알고리즘은 배열이나 리스트에서 두 개의 포인터를 사용하여 효율적으로 목표(문제)를 해결하는 기법으로 정렬된 배열에서 특정 조건을 만족하는 부분을 찾을 때 사용하면 시간 복잡도를 줄이는 매우 좋다.로직두 개의 포인터를 사용하여 배열을 탐색보통 하나를 왼쪽(배열 인덱스0)에서 시작, 다른 하나는  오른쪽에서 시작하여  특정 조건을 만족하는 경우를 찾는다.문제 유형에따라 오른쪽 시작 지점이 0부터 시작할 수도 있고 배열 인덱스의 최대치에서부터 시작할 수 있다.대표 유형두 수 의 합배열이 정렬된 상태에서 투 포인터를 사용하여 두 수의 합이 특정 값이 되는지 찾는 문제로직왼쪽 인덱스 left를 0으로, 오른쪽 인덱스 right를 배열의 끝으로 설정..

알고리즘 2025.03.15

[삼성sw 파이썬] 14413 격자판 칠하기

[삼성sw 파이썬] 14413 격자판 칠하기 문제N x M 크기의 직사각형 격자판에서 각 칸의 크기는 1x1 크기의 정사각형 모양이다.이 격자판을 흰색 또는 검정색으로 칠할 계획이다.N  x M 크기의 행렬 A가 있어서, Ai,j 가 ‘#’라면 격자판의 i행 j열에 있는 칸은 검은색으로 칠해야 하고, Ai,j 가 ‘.’라면 격자판의 i행 j열에 있는 칸은 흰색으로 칠해야 하며, Ai,j 가 ‘?’라면 격자판의 i행 j열에 있는 칸은 검은색으로 칠해도 되고 흰색으로 칠해도 된다.이대 인접한 두 칸의 색은 항상 다르게 할 수 있는지 판단하는 프로그램을 작성해야한다. 입력첫 번째 줄에는 테스트 케이스 수가 주어진다.각 테스트 케이스 첫번째 줄에는 N,M이 주어지고 그다음줄에는 행렬 A가 N개의 줄에 나타난다...

[파이썬 삼성sw] 6057 그래프의 삼각형

[파이썬 삼성sw] 6057 그래프의 삼각형문제정점이 N개, 간선이 M개 있는 그래프가 주어진다. 정점에는 1번에서 N번까지의 번호가 붙어 있다.이때 i 번 정점과 j 번 정점 사이에, j번 정점과 k번 정점 사이에, k번 정점과 i번 정점 사이에 모든 간선이 있는(i, j, k)를 삼각형이라고 하자 (i 이때 삼각형 개수를 구하는 프로그램을 작성하라.입력첫 번째 줄에 테스트 케이스의 수 T 가 주어진다.각 테스트 케이스의 첫 번째 줄에는 두정수 N, M이 공백으로 구분되어 주어진다.다음 M개의 줄에는 두 정수 X, Y가 주어진다.이는 X번 정점과 Y번 정점 사이에 간선이 있다는 의미이다.출력삼각형의 개수를 출력한다.풀이나는 DFS를 이용하여 풀었다.1번 정점에서부터 시작해서 1번 정점에서 연결된 모든 ..

[파이썬 알고리즘] 플로이드 워셜(Floyd-Warshall) 알고리즘

[파이썬 알고리즘] 플로이드 워셜(Floyd-Warshall) 알고리즘 플로이드 워셜 알고리즘이란?모든 정점 쌍 사이의 최단 경로를 찾는 알고리즘으로 다익스트라 알고리즘을 정점수만큼 반복하는 거와 같은 결과값을 가지지만시간복잡도가 O(n³) 이기에 정점의 수가 적을때에는 다이스트라 알고리즘보다 빠른 결과값을 받을 수 있다. 알고리즘 동작 과정비용 테이블 초기화:모든 정점 간의 최단 거리 정보를 담는 테이블을 생성합니다. 처음에는 무한대(inf)로 설정하여, 아직 연결되지 않은 상태를 나타냅니다.간선 정보 입력:간선 정보를 입력받아, 두 정점 사이의 거리를 그래프 테이블에 입력합니다. 간선 정보는 (a, b, c) 형식으로, a에서 b로 가는 거리가 c라는 뜻입니다.자기 자신으로 가는 거리는 0으로 설정:..

알고리즘 2024.10.08

[삼성 sw 파이썬] 4371 항구에 들어오는 배

[삼성 sw 파이썬] 4371 항구에 들어오는 배 문제항구에 배가 들어오 늘 날을 '즐거운 날' 이라고 하자. 이때 각 배들은 항구를 주기적으로 방문한다. 예를 들어 주기가 3인 배는 항구에 1일 차 4일 차 7일 차 등에 방문하게 된다.1일 차부터 기록한 '즐거운 날' 들의 목록이 주어질 때 항구에 들렀던 배의 최소 수를 알아내자.(이때 모든 배는 1일 차에 방문한다.) 입력첫번째 줄에 테스트 케이스두 번째 줄부터는 각 케이스의 첫 번째 즐거운 날의 수 n이 주어진다.각 테스트 케이스의 두 번째 줄부터 n개의 줄에 걸쳐 즐거운 날의 정보가 오름 차순으로 정렬되어 주어진다. 출력각 테스트 케이스마다 항구에 들렸던 배의 최소 수를 출력한다. 풀이각 배들이 들어오는 주기가 존재하면 이때 배의 들어오는 배의 ..

[삼성 sw 파이썬] 2814 최장 경로

[삼성 sw 파이썬] 2814 최장 경로문제N개의 정점과 M개의 간선으로 구성된 가중치가 없는 무방향 그래프에서 최장 경로의 길이를 계산하자.정점의 번호 1부터 N번까지 순서대로 부여된다.경로에는 같은 정점의 번호가 2번 이상 등장할 수 없다 경로 상의 인접한 점들 사이에는 반드시 간선이 존재한다.경로의 길이는 경로 상에 등장하는 정점의 개수를 나타낸다. 입력첫 줄에는 테스트케이스가 주어진다.각 테스트 케이이스의 첫 번 줄에는 두 개의 자연수 N, M이 주어진다.두 번째 줄부터 M개의 줄에 걸쳐서 그래프의 간선 정보를 나타낸다.풀이문제에서 가중치가 없는 무방향 그래프라고 주어졌으면 경로상의 가장 경로를 탐색하는 완전 탐색 문제로DFS나  BFS를 이용아여 문제를 풀 수 있다.나는 DFS르 이용하여 문제를..

반응형