본문 바로가기

반응형

알고리즘

(11)
정렬 / 버블정렬 / 선택정렬 정렬은 말 그대로 무작위로 나열된 숫자들을 내림차순 또는 오름차순으로 정렬하는 방법이다. 정렬 방법은 다양하게 있는데 버블정렬과 선택정렬에 대해 정리해보려고 한다. 나만 그런지 모르겠는데 정렬 이름만 듣고 무슨 정렬인지 바로 떠오르지가 않고 자꾸 헷갈려서 이번에 정리하면서 기억해보려고 한다. 버블정렬 (bubble sort) 버블정렬은 인접한 두 수를 비교해서 정렬하는 방법이다. 정렬이 완료될 때까지 루프를 돌아서 정렬시킨다. 다음의 과정을 거친다. 1번째 루프 1. 5 10 7 22 4 위 배열을 오름차순 배열로 만들기 위해 0 ~ 4 번 숫자라고 했을 때 0번 자리 숫자부터 하나 큰 자리에 있는 숫자와 비교하여 정렬을 한다. 0번자리와 1번자리를 비교했을 때 5 < 10 이기 때문에 자리를 바꾸지 않..
백준 2504 괄호의 값 java 문제 설명 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 X가 올바른 괄호열이면 ‘(X)’이나 ‘[X]’도 모두 올바른 괄호열이 된다. X와 Y 모두 올바른 괄호열이라면 이들을 결합한 XY도 올바른 괄호열이 된다. 예를 들어 ‘(()[[]])’나 ‘(())[][]’ 는 올바른 괄호열이지만 ‘([)]’ 나 ‘(()()[]’ 은 모두 올바른 괄호열이 아니다. 우리는 어떤 올바른 괄호열 X에 대하여 그 괄호열의 값(괄호값)을 아래와 같이 정의하고 값(X)로 표시한다. ‘()’ 인 괄호열의 값은 2이다. ‘[]’ 인 괄호열의 값은 3이다. ‘(X)’ 의 괄호값은 ..
백준 11659 구간 합 구하기4 / JAVA 분류 누적 합 제출 일자 2023년 11월 27일 21:25:16 문제 설명 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력 총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다. 전에 풀었던 문제인데 Scanner 대신 BufferedReader를 사용해서 풀었다. 알고리즘은 동일하다. bf사용해서 입력받고 입력받으면서 합 구해서 합배열 바로 생성함 입력받는 동시에 구간합 알고리즘으로 답 구한 후 result 배열에..
백준 1806 부분합 / 자바 java 문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. 출력 첫째 줄에 구하고자 하는 최소의 길이를 출력한다. 만일 그러한 합을 만드는 것이 불가능하다면 0을 출력하면 된다. 중심 아이디어 투포인터 알고리즘을 사용 함 https://dev-tatolee.tistory.com/entry/%EB%91%90-%ED%8F%AC%EC%9D%B8%ED%84%..
두 포인터 / 투포인터 알고리즘 투포인터 알고리즘은 말 그래도 포인터 두개를 설정하는 알고리즘이다 구간합 구할때도 사용가능하다 예시 1 2 3 4 5의 배열이 있을 때 합이 9가 되는 구간을 모두 구하라고 한다면? 1. start_pointer와 end_pointer를 설정하고 포인터 둘 다 1에 두고 시작한다 2. 만약 두 포인터가 가리키고 있는 곳 사이의 값들이 9보다 작다면 end_pointer를 한칸 이동시킨다 -> 그럼 start_pointer는 1, end_pointer는 2를 가리킨다 3. 1+2는 3이므로 아직 9보다 작다 -> end_pointer 한칸 이동 4. 1+2+3 은 6이므로 -> end_pointer 한칸 뒤로 이동 5. 1+2+3+4 는 10이므로 9보다 크다 -> start_pointer 한칸 뒤로 이동..
백준 11659 구간 합 구하기 4 JAVA 문제 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력 총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다. 제한 1 ≤ N ≤ 100,000 1 ≤ M ≤ 100,000 1 ≤ i ≤ j ≤ N 흔한 구간합 구하기 문제인데 나는 딱 구간합 구하기 이론만 아는 상태로 얼레벌레 풀었다 구간합 배열을 만들어놓고 2~4 까지의 합이면 4까지의 합에서 1까지의 합을 빼는 방법이다 제출한코드 import java.util.Sc..
백준 27866 문자와 문자열 / Java https://www.acmicpc.net/problem/27866 27866번: 문자와 문자열 첫째 줄에 영어 소문자와 대문자로만 이루어진 단어 $S$가 주어진다. 단어의 길이는 최대 $1\,000$이다. 둘째 줄에 정수 $i$가 주어진다. ($1 \le i \le \left|S\right|$) www.acmicpc.net 단어 S와 정수 i가 주어졌을 때, S의 i번째 글자를 출력하는 프로그램을 작성하시오. S의 길이는 최대 1000 i
백준 25083 새싹 - Java https://www.acmicpc.net/problem/25083 25083번: 새싹 아래 예제와 같이 새싹을 출력하시오. www.acmicpc.net 입력없이 새싹모양 출력만 있는 문제 ,r'"7 r`-_ ,' ,/ \. ". L_r' `~\/ | | 다음과 같은 모양을 출력해야함 문제가 되는 부분은 따옴표(" , ')의 출력과 역슬래쉬(\)의 출력 두 경우 모두 앞에 역슬래쉬(\)를 붙이면 역슬래쉬제외하고 원하는 대로 출력됨 \' 출력시 ' 로 출력 \\ 출력시 \\로 출력 따라서 다음과 같이 제출시 정답 class Main { public static void main(String[] args) throws Exception { System.out.println(" ,r\'\"7"); System..

반응형