코딩 블로그
-
[알고리즘] A* (에이 스타) 알고리즘
오늘 포스팅할 알고리즘은 A* (에이 스타)알고리즘이다,A*(에이 스타)는 그래프의 최단 경로 문제를 해결하는 알고리즘으로 다익스트라 알고리즘을 발전시킨 것 입니다. 다익스트라 알고리즘은 시작점에서 각 정점에 이르는 최단 경로를, 시작점에서 가까운 정점부터 결정한다. 그러다 보니 종점에서 멀어지는 방향에 있는 정점들의 최단 경로도 결정하게 되는데 이 계산은 결국 사용되지 않기 때문에 불필요한 계산이 된다. A*는 이를 방지하기 위한 알고리즘이다. 다익스트라 알고리즘을 잘모른다면 아래의 포스팅을 보고 오는 것을 추천한다. [알고리즘] 다익스트라 알고리즘 (Dijkstra Algorithm)오늘 포스팅할 내용은 다익스트라 알고리즘으로 앞서 포스팅했던 벨먼-포드 알고리즘과 마찬가지로 그래프의 최단 경로를 구하..
2025.02.07
-
[알고리즘] 누적합 (Prefix Sum)
누적합(Prefix Sum)은 배열 또는 리스트 등에서 일정 구간의 합을 빠르게 계산하기 위한 방법이면서 동적 계획법(DP)의 형태 중 하나이다.기본적인 방식은 각 요소까지의 누적합을 계산하여 이를 배열에 저장해 두는 것이다. 이후 특정 구간의 합을 구할때 저장해둔 배열을 사용한다. 더보기동적계획법(DP, Dynamic Programming)여기서 동적계획법을 간단히 설명하면 DP, 즉 Dynamic Programming의 줄임말로 기본적인 아이디어는 하나의 큰문제를 여러 개의 작은 문제로 나누어서 해결하고 그 결과를 저장하여 다시 큰 문제를 해결할 때 사용하는 것이다.DP는 특정한 알고리즘이 아닌 문제해결 패러다임으로 해당 이름은 큰 의미가 없이 지어졌다고 한다. 누적합 조건 누적합은 배열의 값들이 변..
2025.02.10
-
[C#] int에서 string로 변환 (int to string)
1. 단순 변환int의 ToString() 메서드를 사용하면 string으로 변환할 수 있다.int i = 3;string str = i.ToString();Console.WriteLine(str); // 3 2. 진법을 변환하면서 string으로 변환하기Covert클래스의 ToString 메서드를 사용하면 진법을 바꾸면서 string으로 변환할 수 있다.Convert.ToString(int, int) 형태로 두번째 매개변수에 변환할 진법을 숫자로 넣어주면 된다.2, 8 , 10, 16진수로 변환이 가능하다.int i = 6;string str = Convert.ToString(i, 2); // 6을 2진법으로 변환Console.WriteLine(str); // 110
2024.11.04
-
[C#] string.Split() + StringSplitOptions
string의 메서드 중 split에 대해 좀 더 자세히 다루기 위해 따로 기록한다. ● Split(char[]|string[], *count, *option) 기준 문자 기준으로 문자열을 잘라 문자열로 반환하는 string 메서드 *은 생략이 가능한 매개변수 매개변수- char[]|string[] : 기준 문자|기준 문자열문자열을 자를때 기준이 되는 문자열, 기준이 한개면 사용하면 배열이 아니어도 상관없다. - *count : 반환할 부분 문자열 최대 수해당 수 만큼만 문자열을 잘라 준다. - *option : 빈 문자열 옵션StringSplitOptions의 필드None: 문자열을 분리할 때 기본 옵션을 사용한다.RemoveEmptyEntries: 문자열을 분리할 때 빈 문자열은 제거한다TrimEn..
2024.07.31
-
[C#] 대문자, 소문자로 변환하기 (ToUpper(), ToLower())
1. 문자열 대문자로 변환대문자 변환은 ToUpper 메서드를 사용하면 된다. 2. 문자열 소문자로 변환소문자 변환은 ToLower 메서드를 사용하면 된다.string abc = "abc";abc = abc.ToUpper();Console.WriteLine(abc); // ABCabc = abc.ToLower();Console.WriteLine(abc); // abc 영문을 제외하고 숫자나 다른 문자들은 그대로 나온다.string a11b = "a11b";Console.WriteLine(a11b.ToUpper()); // A11B개인적으로는 회사 업무할 때 사용자들이 입력 값을 이나, 다른 플랫폼에서 가져온 데이터들의 컬럼 이름을 비교 할때 첫글자를 대문자로 한다던가, 전부 대문자로 한다던가, 카멜케이스..
2025.06.19
-
[MYSQL][프로그래머스][Lv1] 특정 형질을 가지는 대장균 찾기
프로그래머스 > 코딩테스트 연습 > SELECT > 특정 형질을 가지는 대장균 찾기 https://school.programmers.co.kr/learn/courses/30/lessons/301646 📢 문제 설명대장균들은 일정 주기로 분화하며, 분화를 시작한 개체를 부모 개체, 분화가 되어 나온 개체를 자식 개체라고 합니다. 다음은 실험실에서 배양한 대장균들의 정보를 담은 ECOLI_DATA 테이블입니다. ECOLI_DATA 테이블의 구조는 다음과 같으며, ID, PARENT_ID, SIZE_OF_COLONY, DIFFERENTIATION_DATE, GENOTYPE 은 각각 대장균 개체의 ID, 부모 개체의 ID, 개체의 크기, 분화되어 나온 날짜, 개체의 형질을 나타냅니다.Column nameTyp..
2025.05.14
-
[C#][프로그래머스][Lv2] 과제 진행하기
프로그래머스 > 코딩테스트 연습 > 연습문제 > 과제 진행하기 https://school.programmers.co.kr/learn/courses/30/lessons/176962#qna 📒 문제과제를 받은 루는 다음과 같은 순서대로 과제를 하려고 계획을 세웠습니다. 과제는 시작하기로 한 시각이 되면 시작합니다.새로운 과제를 시작할 시각이 되었을 때, 기존에 진행 중이던 과제가 있다면 진행 중이던 과제를 멈추고 새로운 과제를 시작합니다.진행중이던 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춰둔 과제를 이어서 진행합니다.만약, 과제를 끝낸 시각에 새로 시작해야 되는 과제와 잠시 멈춰둔 과제가 모두 있다면, 새로 시작해야 하는 과제부터 진행합니다.멈춰둔 과제가 여러 개일 경우, 가장 최근에 멈춘 과제..
2025.02.12
-
[C#] List 검색 메서드 (Contains(), Exists(), Find())
C# List는 List에 특정 값이 존재하는지 확인하는 메서드가 여러개 있다.그중 Contains(), Exists(), Find()에 대해 알아보겠다. Contains vs Exists vs Find List.Contains(T)단순히 매개변수의 내용을 포함하는 요소가 List에 있는지 여부를 확인한다.있으면 True, 없으면 False를 반환한다.List.Exists(Predicate)특정 값을 찾기 위한 조건과 일치하는 요소가 List에 포함되어 있는지 여부를 확인한다.있으면 True, 없으면 False를 반환한다.List.Find(Predicate)특정 값을 찾기 위한 조건과 일치하는 요소가 List에 처음으로 검색된 요소를 반환한다.검색되지 않으면 T형식의 기본값이 반환된다.아래 클래스는 이..
2025.01.09
-
[C#] Dictionary로 변환 (ToDictionary)
Enumerable 메서드 중 Dictionary로 변환해주는 ToDcitonary에 대해 알아보겠다. .ToDictionary([key가 될 값], [value가 될 값])각 요소를 돌며 key와 value를 지정해준다. key만 지정해줄 수 도 있고, key와 value를 다 지정해줄 수 도 있다.key만 지정해주는 경우 value는 순차적으로 들어간다. 메서드 예제key만 지정해주는 경우int 배열을 dictionary로 변경해 주었다.각 요소를 string으로 변환해 key로 잡았다.int[] arr = { 1, 2, 3 };var dic = arr.ToDictionary(i => i.ToString());foreach(var keyValue in dic){ Console.WriteLine(..
2024.11.06
-
[C#] string에서 double로 변환 (string to double)
1. Double.Parse(string)Double.Parse("변환하고 싶은 문자열")을 사용하면 double형으로 변경할 수 있다. string piStr = "3.14"; Double pi = (Double.Parse(piStr)); pi += 5; Console.WriteLine(pi); // 8.14
2025.07.09
-
[Spring] 패키지명을 통일해야하는 이유
스프링에서 개발을 할때 패키지명을 일반적으로 com.example.xxx.controller, com.example.xxx.service 처럼최초에 프로젝트를 생성할때 com.example.xxx 까지 지정해 둔다.위 사진을 보면 com.cos.blog가 기본 패키지명인데, com.costest라고 마음대로 패키지명을 설정해두었다.이렇게 패키지명을 설정하면 안되는 이유를 알아보겠다.그 이유를 알기 위해서는 스프링의 특징 중 한가지에 대해 알아야하는데, IoC(제어의 역전)의 특징을 가지고 있다는 것이다. IoC (Inversion of Control) 란?사용자가 객체를 new XX()해서 생성하는게 아니라 스프링에서 객체를 생성해서 관리하는 것이다. IoC를 이용해서 관리하는 이유?1. 싱글톤을 이용해..
2025.06.04
-
[C#] ProcessStartInfo 클래스
ProcessStartInfo 클래스는 프로세스를 시작할 때 사용되는 정보를 포함하는 클래스입니다. 이 클래스는 프로세스의 이름, 인수, 작업 디렉토리, 우선순위 등 다양한 속성을 제공하여 프로세스를 시작하는 데 필요한 정보를 지정할 수 있다.ProcessStartInfo 클래스의 속성FileName: 시작할 프로세스의 이름을 지정합니다.Arguments: 프로세스에 전달할 인수를 지정합니다.WorkingDirectory: 프로세스의 작업 디렉토리를 지정합니다.PriorityClass: 프로세스의 우선순위를 지정합니다.WindowStyle: 프로세스의 창 스타일을 지정합니다.CreateNoWindow: 프로세스가 창을 생성하지 않도록 지정합니다.ProcessStartInfo 클래스의 사용 예시using ..
2025.04.10
-
[C#][프로그래머스][Lv2] 게임 맵 최단거리
프로그래머스 > 코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS) > 게임 맵 최단거리 https://school.programmers.co.kr/learn/courses/30/lessons/1844 📒 문제ROR 게임은 두 팀으로 나누어서 진행하며, 상대 팀 진영을 먼저 파괴하면 이기는 게임입니다. 따라서, 각 팀은 상대 팀 진영에 최대한 빨리 도착하는 것이 유리합니다. 지금부터 당신은 한 팀의 팀원이 되어 게임을 진행하려고 합니다. 다음은 5 x 5 크기의 맵에, 당신의 캐릭터가 (행: 1, 열: 1) 위치에 있고, 상대 팀 진영은 (행: 5, 열: 5) 위치에 있는 경우의 예시입니다.위 그림에서 검은색 부분은 벽으로 막혀있어 갈 수 없는 길이며, 흰색 부분은 갈 수 있는 길입니다. 캐릭터가..
2025.02.19
-
[알고리즘] 너비 우선 탐색, BFS(Breadth-First Search) 코드 구현
너비 우선 탐색에 대한 개념은 아래 포스팅을 참조하면 된다. [알고리즘] 너비 우선 탐색 (BFS, Breadth-First Search)이번 포스팅은 그래프를 탐색하는 알고리즘 중 하나인 너비 우선 탐색(BFS)에 대해 알아보려고한다. [자료구조] 그래프 (Graph)그래프라고 하면 원 그래프나 막대 그래프, 혹은 수학의 y=f(x) 그twd0622.tistory.com 너비 우선 탐색은 Queue(큐)를 이용해서 코드로 구현할 수 있다. C# 코드를 통해 BFS를 구현해 보겠다.큐(Queue)를 이용한 반복 구현너비 우선 탐색은 Queue를 이용해서 구현할 수 있으며, 한 정점을 방문하면 인접한 정점을 모두 Queue에 담고 Queue에 담긴 정점을 꺼내 Queue에 담긴 모든 노드를 방문할 때 ..
2025.02.17
-
[알고리즘] 깊이 우선 탐색, DFS(Deep-First Search) 코드 구현
깊이 우선 탐색에 대한 개념은 아래의 포스팅을 참조하면 된다. [알고리즘] 깊이 우선 탐색 (DFS, Depth-First Search)이번 포스팅은 그래프를 탐색하는 알고리즘 중 하나인 깊이 우선 탐색(DFS)에 대해 알아보려고 한다. [자료구조] 그래프 (Graph)그래프라고 하면 원 그래프나 막대 그래프, 혹은 수학의 y=f(x) 그래twd0622.tistory.com 깊이 우선 탐색을 코드로 구현하는 방법은 2가지로 반복 구현, 재귀 구현이 있다. C#코드를 통해 DFS를 구현해 보겠다.반복구현반복 구현은 Stack을 이용한 구현 방법으로, 한 정점을 방문하면 인접한 정점들을 모두 Stack에 담고 Stack에서 하나씩 꺼내 인접한 노드를 Stack에 담으면서 Stack에 담긴 모든 노드를 방문..
2025.02.17
최신 글
-
[JAVA][백준][G2] 1377번 버블 소트
https://www.acmicpc.net/problem/1377 📒 문제버블 소트 알고리즘을 다음과 같이 C++로 작성했다.bool changed = false;for (int i=1; i A[j+1]) { changed = true; swap(A[j], A[j+1]); } } if (changed == false) { cout 위 소스에서 N은 배열의 크기이고, A는 정렬해야 하는 배열이다. 배열은 A[1]부터 사용한다.위와 같은 소스를 실행시켰을 때, 어떤 값이 출력되는지 구해보자. ● 시간 제한 / 메모리 제한2 초 / 128 MB 입력첫째 줄에 N이 주어진다. N은 500,000보다 작거나 같은 자연수이다. 둘째 줄부터..
2025.12.29
-
[JAVA][백준][B2] 수 정렬하기
https://www.acmicpc.net/problem/2750 📒 문제N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. ● 시간 제한 / 메모리 제한 1 초 / 128 MB 입력첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.출력첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 입출력 예# 입력1552341# 출력112345 알고리즘 분류구현정렬💻 소스코드import java.io.*;import java.util.*;public class Main { public static void main(Str..
2025.12.15
-
[JAVA][백준][S1] 절댓값 힙 구현하기
https://www.acmicpc.net/problem/11286 📒 문제절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다. 배열에 정수 x (x ≠ 0)를 넣는다.배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다.프로그램은 처음에 비어있는 배열에서 시작하게 된다. ● 시간 제한 / 메모리 제한 2 초 / 256 MB 입력첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 절댓값이 가장 작은 값을 출력하고 ..
2025.12.05
-
[JAVA][백준][S4] 카드2
https://www.acmicpc.net/problem/2164 📒 문제N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 ..
2025.12.04
-
[JAVA][백준][G4] 오큰수
https://www.acmicpc.net/problem/17298 📒 문제크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다. 예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다. ● 시간 제한 / 메모리 제한 1 초 / 512 MB 입력첫째 줄에 수열 A의 크기 N (1 ..
2025.12.03
-
[JAVA][백준][S3] 1874번 스택으로 수열 만들기
https://www.acmicpc.net/problem/1874📒 문제스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을..
2025.12.02
-
[JAVA][백준][P5] 11003번 최솟값 찾기
https://www.acmicpc.net/problem/11003 📒 문제N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. ● 시간 제한 / 메모리 제한 2.4 초 / 512 MB 입력첫째 줄에 N과 L이 주어진다. (1 ≤ L ≤ N ≤ 5,000,000) 둘째 줄에는 N개의 수 Ai가 주어진다. (-109 ≤ Ai ≤ 109)출력첫째 줄에 Di를 공백으로 구분하여 순서대로 출력한다. 입출력 예# 입력112 31 5 2 3 6 2 3 7 3 5 2 6# 출력11 1 1 2 2 2 2 2 3 3 2 2 알고리즘 분류자료 구조우선순..
2025.12.01
-
[JAVA][백준][S5] DNA 비밀번호
https://www.acmicpc.net/problem/12891 📒 문제평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA”는 DNA 문자열이 아니지만 “ACCA”는 DNA 문자열이다. 이런 신비한 문자열에 완전히 매료된 민호는 임의의 DNA 문자열을 만들고 만들어진 DNA 문자열의 부분문자열을 비밀번호로 사용하기로 마음먹었다.하지만 민호는 이러한 방법에는 큰 문제가 있다는 것을 발견했다. 임의의 DNA 문자열의 부분문자열을 뽑았을 때 “AAAA”와 같이 보안에 취약한 비밀번호가 만들어 질 수 있기 때문이다. 그래서 민호는 부분문자열에서 등장하는..
2025.11.28
-
[JAVA][백준][G4] 1253번 좋아
https://www.acmicpc.net/problem/1253 📒 문제N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.수의 위치가 다르면 값이 같아도 다른 수이다. ● 시간 제한 / 메모리 제한 2 초 / 256 MB 입력첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)출력좋은 수의 개수를 첫 번째 줄에 출력한다. 입출력 예# 입력1101 2 3 4 5 6 7 8 9 10# 출력18 알고리즘 분류자료 구조정렬이분 탐색두 포인터💻 소스코드import j..
2025.11.25
-
[JAVA][백준][S4] 1940번 주몽
https://www.acmicpc.net/problem/1940 📒 문제주몽은 철기군을 양성하기 위한 프로젝트에 나섰다. 그래서 야철대장을 통해 철기군이 입을 갑옷을 만들게 하였다. 야철대장은 주몽의 명에 따르기 위하여 연구에 착수하던 중 아래와 같은 사실을 발견하게 되었다. 갑옷을 만드는 재료들은 각각 고유한 번호를 가지고 있다. 갑옷은 두 개의 재료로 만드는데 두 재료의 고유한 번호를 합쳐서 M(1 ≤ M ≤ 10,000,000)이 되면 갑옷이 만들어 지게 된다. 야철대장은 자신이 만들고 있는 재료를 가지고 갑옷을 몇 개나 만들 수 있는지 궁금해졌다. 이러한 궁금증을 풀어 주기 위하여 N(1 ≤ N ≤ 15,000) 개의 재료와 M이 주어졌을 때 몇 개의 갑옷을 만들 수 있는지를 구하는 프로그램을..
2025.11.06
-
[JAVA][백준][S5] 2018번 수들의 합 5
https://www.acmicpc.net/problem/2018 📒 문제어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한다. 이때, 사용하는 자연수는 N이하여야 한다. 예를 들어, 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5의 4가지가 있다. 반면에 10을 나타내는 방법은 10, 1+2+3+4의 2가지가 있다. N을 입력받아 가지수를 출력하는 프로그램을 작성하시오. ● 시간 제한 / 메모리 제한 2초 / 32MB입력첫 줄에 정수 N이 주어진다.출력입력된 자연수 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 ..
2025.11.06
-
[JAVA][백준][G3] 10986번 나머지 합
https://www.acmicpc.net/problem/10986📒 문제수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) 쌍의 개수를 구해야 한다. 시간 제한 / 메모리 제한 1초 / 256MB입력첫째 줄에 N과 M이 주어진다. (1 ≤ N ≤ 106, 2 ≤ M ≤ 103) 둘째 줄에 N개의 수 A1, A2, ..., AN이 주어진다. (0 ≤ Ai ≤ 109)출력첫째 줄에 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 출력한다. 입출력 예# 입력15 31 2 3 1 2# 출력17 알고리즘 분류수..
2025.11.05
-
[JAVA][백준][S1] 11660번 구간 합 구하기 5
https://www.acmicpc.net/problem/11660 📒 문제N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다.예를 들어, N = 4이고, 표가 아래와 같이 채워져 있는 경우를 살펴보자.1234234534564567여기서 (2, 2)부터 (3, 4)까지 합을 구하면 3+4+5+4+5+6 = 27이고, (4, 4)부터 (4, 4)까지 합을 구하면 7이다.표에 채워져 있는 수와 합을 구하는 연산이 주어졌을 때, 이를 처리하는 프로그램을 작성하시오. 시간 제한 / 메모리 제한1 초 / 256MB입력첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 102..
2025.10.24
-
[JAVA][알고리즘] 구간 합
구간 합은 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해 사용하는 특수한 목적의 알고리즘 이다. 코딩 테스트에서 사용 빈도가 높기 때문에 알아두면 좋다. 구간 합은 누적합이라고도 하는데, C#으로 누적합을 정리해둔 글이 있으니 참고해도 좋을것 같다.해당 게시글엔 2차원 배열의 누적합도 정리해 두었다. [알고리즘] 누적합 (Prefix Sum)누적합(Prefix Sum)은 배열 또는 리스트 등에서 일정 구간의 합을 빠르게 계산하기 위한 방법이면서 동적 계획법(DP)의 형태 중 하나이다.기본적인 방식은 각 요소까지의 누적합을 계산하여 이를 배twd0622.tistory.com구간 합 이론구간 합 알고리즘을 활용하려면 먼저 합 배열을 구해야한다. 배열 arr이 있을 때 합 배열 sumArr은 다음과 같다...
2025.10.21
-
[JAVA] 형 변환
String형 → 숫자형(int, double, float, long, short)String sNum = "1234";int i1 = Integer.parseInt(sNum);int i2 = Integer.valueOf(sNum);double d1 = Double.parseDouble(sNum);double d2 = Double.valueOf(sNum);float f1 = Float.parseFloat(sNum);float f2 = Float.valueOf(sNum);long l1 = Long.parseLong(sNum);long l2 = Long.valueOf(sNum);short s1 = Short.parseShort(sNum);short s2 = Short.valueOf(sNum); 숫자형(in..
2025.10.20
-
[JAVA] 이차원 ArrayList로 그래프 표현
코딩 테스트 문제에서 그래프 관련 알고리즘이 자주 등장한다. 이때 그래프 구조를 표현 하는데 많이 사용하는 것이 이차원 ArrayList 이다. 이차원 ArrayList의 선언부터 활용하끼 3단계로 나눠 설명하겠다. 그래프의 대한 내용은 아래 포스팅을 참고하면 된다. [자료구조] 그래프 (Graph)그래프라고 하면 원 그래프나 막대 그래프, 혹은 수학의 y=f(x) 그래프가 생각날 수 있다.하지만 컴퓨터 과학에서 사용하는 그래프는 좀 다르다. 이번 포스팅에서는 컴퓨터 과학에서 말하는 그래twd0622.tistory.com01. 이차원 ArrayList 선언과 초기화그래프의 에지를 표현하는 클래스를 만들어 두었다.class Edge{ int endNode; int value; public..
2025.10.20
-
[JAVA] 다중 조건 정렬 (Comparable, Comparator)
코딩테스트 문제를 풀 때 여러 기준에 따라 데이터를 정렬해야 하는 상황이 나오기도 한다.예를 들어 성적을 정렬할 때 영어 점수를 기준으로 하되, 영어 점수가 같으면 수학 점수를 기준으로 할 수 있다.이때 다중 조건 정렬을 사용하면 여러 기준을 동시에 적용하여 원하는 순서대로 데이터를 정렬할 수 있다. 자바에는 Comparable과 Comparator 인터페이스를 사용하여 다중 조건 정렬을 구현할 수 있다.Comparable 인터페이스영어 점수를 우선 기준으로 하고, 영어 점수가 같을 경우 수학 점수로 정렬하도록 구현한 Comparable 인터페이스 예시이다.public class Score implements Comparable{ int english; int math; public Score(int ..
2025.10.17
-
[알고리즘] 나누기 연산의 분배 법칙
코딩 테스트에서 정답의 나머지 값을 요구하는 경우가 종종 있다. 이 문제에는 자료형의 표현 범위를 넘지 않게 유도하고 나머지 연산의 원리를 알고 있는지 묻는 의도가 담겨 있다.나머지 연산은 나눗셈을 제외하고 덧셈, 뺄셈, 곱셉의 분배 법칙이 성립된다.예시 값: A = 20, B = 6, C = 3 ● 덧셈의 분배 법칙 성립 → (A+B) % C == (A%C + B%C) % C(20+6) % 3 = 26 % 3 = 2(20 % 3 + 6 % 3) % 3 = (2+0) % 3 = 2 ● 뺄셈의 분배 법칙 성립 → (A-B) % C == (A%C - B%C) % C(20-6) % 3 = 14 % 3 = 2(20 % 3 - 6 % 3) % 3 = (2-0) % 3 = 2 ● 곱셈의 분배 법칙 성립 ..
2025.10.15
-
[알고리즘] 인덱스 해싱
코딩 테스트에서 가장 많이 사용하는 자료구조는 배열이다. 보통 배열을 사용할 때 인덱스로 데이터에 접근한다. 인덱스는 일반적으로 몇번째 데이터인지 나타내는 역할을 한다. 하지만 상황에 따라 인덱스에 해싱(hashing)개념을 적용하여 단순한 위치가 아니라 특정한 의미를 지닌 값으로 활용하면 문제 해결을 더 쉽게 할 때도 있다. arr[1]의 의미몇 번째 데이터인지 순서를 의미하는 경우 → 첫 번째 데이터를 저장숫자값으로 의미를 부여하는 경우 → 1이라는 값이 몇 개 있는지를 저장인덱스 해싱 적용 예시예를 들어 1000보다 작은 자연수 10,000,000개를 1초 안에 정렬해야 하는 상황이라고 가정해보자. 데이터의 양이 많아서 일반적인 방법으로는 1초안에 정렬하기 어렵다.하지만 인덱스를 값 자체로 활용하면..
2025.10.15
-
[알고리즘] 시간 복잡도
알고리즘에서 시간 복잡도는 주어진 문제를 해결하기 위한 연산 횟수를 말한다. 일반적으로 수행 시간은 1억 번의 연산을 1초의 시간으로 간주하여 예측한다. 어떤 코딩테스트 문제에서 제한시간을 2초로 주어졌다면, 2억 번의 연산안에 해당 문제를 해결해야 한다는 말이다. 시간 복잡도 유형빅-오메가(Ω(n)) : 최선(best case)의 연산 횟수를 나타낸 표기법빅-세타(Θ(n)) : 보통(average case)의 연산 횟수를 나타낸 표기법빅오(O(n)) : 최악(worst case)의 연산 횟수를 나타낸 표기법다음 예시로 0~99 사이의 무작윗값을 찾아 출력한다고 했을때, // 0~99 사이 값 무작위 선택for findNumber = (int)(Math.random() * 100);for(int i = ..
2025.10.14