목록알고리즘 (192)
곽로그
개념 n번째 인덱스를 선택한다. 그런다음 인덱스 n-1부터 인덱스 0까지 역순으로 순회하여 n번째 인덱스 값과 비교한다. n번째 인덱스 값보다 비교하는 인덱스(k)의 값이 크면, 비교하는 인덱스(k)를 인덱스 k+1로 옮긴다. 만약 인덱스(k)의 값이 작으면 인덱스 k+1자리에 인덱스 n을 삽입한다. 구현 기준값은 인덱스가 1부터 시작하고 리스트의 길이-1까지 순회한다. 기준값에 대한 비교값은 인덱스가 기준인덱스-1 부터 시작해서 0까지 역순으로 순회한다. 비교값이 기준값보다 크면 비교 인덱스+1에 비교값을 넣는다. 그러다 비교값이 기준값보다 작으면 while문을 빠져나오고 비교인덱스+1에 temp값을 넣는다. 삽입 정렬에서 핵심은 비교인덱스 +1 에 어떤 값을 넣느냐 인 것 같다. 기준값보다 비교값이 ..
alwaysbemoon.tistory.com/256 → 개정본 [백준 14889, Java] 스타트와 링크 문제 www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 풀.. alwaysbemoon.tistory.com import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream..
문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. www.acmicpc.net 접근 코드 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; public class Main { p..
문제 https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. www.acmicpc.net 방법1 크기가 M인 numArray를 선언한다 numArray의 index에 1~N 중 하나의 숫자를 넣는다 numArray의 index+1 에 numArray[index-1]~N 중 하나의 숫자를 넣는다. 코드1 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader..
개념 "최솟값을 선택"하는 알고리즘이다. 버블정렬은 좌우-좌우를 순차적으로 비교하면서 각 턴마다 최대값을 맨 오른쪽으로 보내는 것이라면, 선택알고리즘은 각 턴마다 최소값을 찾은 후 맨 왼쪽으로 보내는 알고리즘이다. 구현 7 5 6 9 2 를 예로 들어보자. 첫번째 순회에서는 인덱스 0에 넣을 최솟값을 찾는다. 7 5 6 9 2 중 최솟값은 2 이므로 인덱스 0에 있는 7과 자리를 바꾼다. 첫번째 순회의 결과는 2 5 6 9 7이 된다. 첫번째 순회에서 인덱스 0은 최소값으로 정렬되었다. 두번째 순회에서는 인덱스 1에 넣을 최솟값을 찾는다. (2) 5 6 9 7에서 최솟값은 5 이므로 인덱스 1에 5를 넣는다. 두번째 순회의 결과는 2 5 6 9 7 이되고 인덱스 0,1은 크기순으로 정렬되어 있다. 이런식..
문제 https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다. www.acmicpc.net 접근방법 String 클래스의 메서드를 활용하면 쉽게 풀 수 있는 문제다. 첫번째 풀이 : isBlank()함수를 사용 단어의 개수는 문장사이의 공백의 개수 +1 이다. 따라서 입력받은 문장의 공백의 개수를 카운팅하면 된다. 여기서 고려해야하는 사항은 두가지다. 첫번째로는 문장 앞뒤로 공백이 있을 수 있다는 건데, 이는 trim함수를 사용하면..
소스 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String..
문제 https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 접근방법 문자 숫자 소요시간(초) ABC 2 3 DEF 3 4 GHI 4 5 JKL 5 6 MNO 6 7 PQRS 7 8 TUV 8 9 WXYZ 9 10 우선 위의 표를 만들어봤다. 소요시간은 숫자+1 이라는 관계가 있다. 그럼 이제 문자와 숫자에 대한 대응관계를 생각해주면 된다. 그런데 문자가 3개인 경우도 있고 4개인 경우도 있어서 이걸 일반화하기는 어려웠다. 그래서 그냥 각 문자다마 일대일 대응으로 접근했다. numbe..