ALGORITHM 100

[백준] 1931 회의실 배정

www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 처음에는 시작 시간을 기준으로 정렬하여 맨 처음부터 끝까지 반복해서 돌면서 회의 종료시간보다 크거나 같은 회의 갯수를 세주어 가장 갯수가 많은 것이 답이 되도록 생각했지만 그렇게 하면 시간초과가 나기 때문에 잘못 생각한 방법이었습니다. 문제 풀이 : 그리디 알고리즘으로 이전 종료시간과 이후 시작 시간이 겹치지 않으면서 가장 종료시간이 빠른 것을 선택해 세주면 됩니다. 1. 먼저 종료 시간을 기준으로 정렬합니다. 2. 다음 시작 시간이 종료 시간보다 크거나 같으면 종료 시간을 갱신해주고 count 변수로 세줍니다. import ..

[백준] 11047 동전0

www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 문제 설명 : 동전은 총 N종류이고 K 가치의 합으로 만들기 위한 동전 개수의 최솟값을 구하라 문제 풀이 : 그리디 알고리즘 최소한의 개수로 만들기 위해서는 가장 큰 동전부터 선택하는 것이 최적의 해가 된다. 동전 K원을 만들기 위해서 오름차순이 되어있는 동전을 맨 뒤에서 부터 확인한다. 만약 동전 K원보다 클 경우 그냥 넘어가고 K원보다 같거나 ..

Bubble Sort. 버블정렬

서로 인접한 두 원소를 검사하여 정렬하는 알고리즘 인접한 두 수를 비교하면서 크기가 클 수록 뒤로 이동하여 결국에는 가장 큰 숫자가 맨 뒤로 이동하게 된다. 정렬된 숫자를 제외하고 계속해서 비교해주면 된다. 예시) 5 6 3 1 8 // 5 6 비교 5 6 3 1 8 // 6 3 비교 , swap 5 3 6 1 8 // 6 1 비교, swap 5 3 1 6 8 // 6 8 비교 5 3 1 6 8 // 1회전 결과 5 3 1 6 8 // 5 3 비교, swap 3 5 1 6 8 // 5 1 비교, swap 3 1 5 6 8 // 5 6 비교 3 1 5 6 8 // 2회전 결과 3 1 5 6 8 // 3 1 비교, swap 1 3 5 6 8 // 3 5 비교 1 3 5 6 8 // 3회전 결과 1 3 5 6..

ALGORITHM/이론 2021.01.05

[백준] 11399번 ATM

www.acmicpc.net/problem/11399 11399번: ATM 첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000) www.acmicpc.net 문제 풀이 : 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구할 떄 중요한 점은 대기 시간의 합입니다. 최소로 하기 위해 먼저 걸리는 시간을 정렬해줍니다. 정렬한 후 대기시간을 더해주면 됩니다. import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scan..

Insertion sort. 삽입정렬

주어진 숫자에서 두번째 자료(key)부터 앞의 자료들과 비교하며 삽입하여 정렬한다. 예시 ) 빨간색 : i 파란색 : j-1 8 5 6 2 4 key 5와 그 앞 8 비교 , swap 5 8 6 2 4 key 6과 그 앞 8 비교 , swap 5 6 8 2 4 key 6과 그 앞 5 비교 5 6 8 2 4 key 2와 그 앞 8 비교, swap 5 6 2 8 4 key 2와 그 앞 6 비교, swap 5 2 6 8 4 key 2와 그 앞 5 비교, swap 2 5 6 8 4 key 4와 그 앞 8 비교, swap 2 5 6 4 8 key 4와 그 앞 6 비교, swap 2 5 4 6 8 key 4와 그 앞 5 비교, swap 2 4 5 6 8 key 4와 그 앞 2 비교 2 4 5 6 8 import j..

ALGORITHM/이론 2021.01.04

Selection sort. 선택정렬

1. 주어진 숫자 중에 최솟값을 선택한다. 2. 최솟값과 맨 앞의 위치(정렬된 것을 제외한)를 변경한다. 3. 정렬된 것은 제외하고 1, 2 를 반복한다. 예시 ) 5 1 8 2 6 에서 최솟값을 찾는다. : 1 , 맨 앞의 5와 바꾼다. // 1회전 1 5 8 2 6 에서 맨 앞의 1을 제외한 최솟값을 찾는다 : 2 , 정렬된 것을 제외한 맨 앞의 5와 바꾼다. // 2회전 1 2 8 5 6 에서 정렬된 1,2 를 제외한 최솟값을 찾는다. : 5 , 정렬된 것을 제외한 맨 앞의 8과 바꾼다. // 3회전 1 2 5 8 6 에서 정렬된 1,2,5를 제외한 최솟값을 찾는다. : 6 , 정렬된 것을 제외한 맨 앞의 8과 바꾼다. // 4회전 1 2 5 6 8 마지막 원소는 자동으로 정렬된다. import j..

ALGORITHM/이론 2021.01.04

[프로그래머스] 모의고사

programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr 문제 설명 : 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers 에서 1번, 2번, 3번 중에 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담으시오. 문제 풀이 : 완전 탐색으로 먼저 1번, 2번, 3번 수포자들의 배열을 만들어줍니다. check 배열은 수포자들의 정답을 각각 세주기 위한 배열입니다. 이후 answers 배열을 처음부터 끝까지 반복해서..

HashMap(해시테이블)

import java.util.Collection; import java.util.HashMap; import java.util.Set; public class HashMap_test { public static void main(String[] args) { HashMap hm = new HashMap(); //키가 똑같으면 마지막께 들어간다. hm.put(1, "test1"); hm.put(3, "test2"); hm.put(2, "test2"); //해당하는 키가 있으면 true 아니면 false hm.containsKey(1); //해당하는 value가 있으면 true 아니면 false hm.containsValue("test1"); //해당하는 key의 값을 가져와라 hm.get(2); //중복..

ALGORITHM/이론 2020.11.14

[백준] 4949번 균형잡힌 세상

www.acmicpc.net/problem/4949 4949번: 균형잡힌 세상 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마 www.acmicpc.net import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (true) { Stack stack = new Stack(); String s = sc.nextLine(); if(s.eq..

[프로그래머스] 2018 KAKAO BLIND RECRUITMENT 캐시

programmers.co.kr/learn/courses/30/lessons/17680 코딩테스트 연습 - [1차] 캐시 3 [Jeju, Pangyo, Seoul, NewYork, LA, Jeju, Pangyo, Seoul, NewYork, LA] 50 3 [Jeju, Pangyo, Seoul, Jeju, Pangyo, Seoul, Jeju, Pangyo, Seoul] 21 2 [Jeju, Pangyo, Seoul, NewYork, LA, SanFrancisco, Seoul, Rome, Paris, Jeju, NewYork, Rome] 60 5 [Jeju, Pangyo, S programmers.co.kr 문제 설명 : LRU(Least Recently Used) 를 사용하여 cache 실행시간 구하기 ..