Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

17-jung0115 #175

Merged
merged 15 commits into from
Nov 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion jung0115/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
*.jars
*.jar
*.jar
*.class
8 changes: 7 additions & 1 deletion jung0115/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,10 @@
| 8차시 | 2024.08.19.월 | 이분 탐색 | [입국심사(Lv.3)](https://school.programmers.co.kr/learn/courses/30/lessons/43238) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/148 |
| 9차시 | 2024.08.27.화 | 수학 | [음식 평론가(1188)](https://www.acmicpc.net/problem/1188) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/150 |
| 10차시 | 2024.08.28.수 | 브루트포스 | [램프(1034)](https://www.acmicpc.net/problem/1034) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/151 |
| 11차시 | 2024.09.04.수 | 수학 | [축구(1344)](https://www.acmicpc.net/problem/1344) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/153 |
| 11차시 | 2024.09.04.수 | 수학 | [축구(1344)](https://www.acmicpc.net/problem/1344) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/153 |
| 12차시 | 2024.09.07.토 | 다이나믹 프로그래밍 | [개근상(1563)](https://www.acmicpc.net/problem/1563) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/157 |
| 13차시 | 2024.09.23.월 | 다이나믹 프로그래밍 | [사전(1256)](https://www.acmicpc.net/problem/1256) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/162 |
| 14차시 | 2024.09.25.수 | 그리디 알고리즘 | [컵라면(1781)](https://www.acmicpc.net/problem/1781) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/165 |
| 15차시 | 2024.09.28.토 | 이분 탐색 | [가장 긴 증가하는 부분 수열 2(12015)](https://www.acmicpc.net/problem/12015) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/169 |
| 16차시 | 2024.10.05.토 | 시뮬레이션 | [주차 요금 계산(Lv.2)](https://school.programmers.co.kr/learn/courses/30/lessons/92341) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/173 |
| 17차시 | 2024.10.11.금 | 그리디 알고리즘 | [마법의 엘리베이터(Lv.2)](https://school.programmers.co.kr/learn/courses/30/lessons/148653) | https://github.com/AlgoLeadMe/AlgoLeadMe-4/pull/175 |
66 changes: 66 additions & 0 deletions jung0115/그리디알고리즘/Baekjoon_1781.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// 14차시 2024.09.25.수 : 백준 - 컵라면(1781)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
import java.util.PriorityQueue;

public class Baekjoon_1781 {
static class CupNoodle implements Comparable<CupNoodle> {
int deadLine;
int count;

public CupNoodle(int deadLine, int count) {
this.deadLine = deadLine;
this.count = count;
}

@Override
public int compareTo(CupNoodle o) {
// 데드라인을 기준으로 오름차순 정렬
return this.deadLine - o.deadLine;
}
}

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int N = Integer.parseInt(br.readLine());

CupNoodle[] cupNoodles = new CupNoodle[N];

for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());

int deadLine = Integer.parseInt(st.nextToken()); // 데드라인
int count = Integer.parseInt(st.nextToken()); // 맞힐 때 받는 컵라면 수

cupNoodles[i] = new CupNoodle(deadLine, count);
}

// 데드라인을 기준으로 정렬 (오름차순)
Arrays.sort(cupNoodles);

PriorityQueue<Integer> pq = new PriorityQueue<>();

for (CupNoodle cn : cupNoodles) {
// 만약 현재 데드라인 내에 풀 수 있는 문제라면 큐에 추가
pq.offer(cn.count);

// 큐의 크기가 데드라인을 초과하면 가장 적은 컵라면 수를 제거
if (pq.size() > cn.deadLine) {
pq.poll();
}
}

int answer = 0;

// 큐에 남아 있는 컵라면의 총합을 구함
while (!pq.isEmpty()) {
answer += pq.poll();
}

System.out.println(answer);
}
}
37 changes: 37 additions & 0 deletions jung0115/그리디알고리즘/Baekjoon_1781_fail.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// 14차시 2024.09.25.수 : 백준 - 컵라면(1781)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.HashMap;
import java.util.Iterator;

public class Baekjoon_1781_fail {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

int N = Integer.parseInt(br.readLine());

HashMap<Integer, Integer> cupNoodles = new HashMap<Integer, Integer>();

for(int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());

int deadLine = Integer.parseInt(st.nextToken()); // 데드라인
int count = Integer.parseInt(st.nextToken()); // 맞힐 때 받는 컵라면 수

int current = cupNoodles.getOrDefault(deadLine, 0);
if(current < count) cupNoodles.put(deadLine, count);
}

int answer = 0;

Iterator<Integer> keys = cupNoodles.keySet().iterator();
while(keys.hasNext()){
int key = keys.next();
answer += cupNoodles.get(key);
}

System.out.print(answer);
}
}
26 changes: 26 additions & 0 deletions jung0115/그리디알고리즘/Programmers_148653.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// 17차시 2024.10.11.금 : 프로그래머스 - 마법의 엘리베이터(Lv.2)
class Solution {
fun solution(storey: Int): Int {
var answer: Int = 0
var storeyClone = storey

while (storeyClone > 0) {
val num = storeyClone % 10
storeyClone /= 10

if (num < 5) {
answer += num
} else if (num == 5) {
// 5일 때, 다음 자릿수를 확인
if (storeyClone % 10 >= 5) storeyClone++

answer += 5
} else {
answer += (10 - num)
storeyClone++
}
}

return answer
}
}
55 changes: 55 additions & 0 deletions jung0115/다이나믹프로그래밍/Baekjoon_1256.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package jung0115.다이나믹프로그래밍;
// 13차시 2024.09.23.월 : 백준 - 사전(1256)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Baekjoon_1256 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());

int N = Integer.parseInt(st.nextToken()); // a의 개수
int M = Integer.parseInt(st.nextToken()); // z의 개수
int K = Integer.parseInt(st.nextToken()); // 몇 번째 문자열을 찾아야 하는지

StringBuilder answer = new StringBuilder();

long[][] dp = new long[ N + M + 1 ][ N + M + 1 ];
dp[0][0] = 1;

for(int i = 1;i <= N + M; i++){
dp[i][0] = 1;
dp[i][i] = 1;
for(int j = 1; j < i; j++){
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];

if(dp[i][j] > 1000000000)
dp[i][j] = 1000000001;
}
}

// 사전에 수록되어 있는 문자열의 개수가 K보다 작을 경우
if(dp[N + M][M] < K) {
answer.append("-1");
}
else {
while (N != 0 || M != 0) {
if(dp[N + M - 1][M] >= K) {
answer.append("a");
N--;
}
else {
answer.append("z");
K -= dp[N + M - 1][M];
M--;
}
}
}

System.out.print(answer);

}
}
37 changes: 37 additions & 0 deletions jung0115/다이나믹프로그래밍/Baekjoon_1563.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// 12차시 2024.09.07.토 : 백준 - 개근상(1563)
import java.io.BufferedReader
import java.io.InputStreamReader


fun main() {
// ✅ Input
val br = BufferedReader(InputStreamReader(System.`in`))

val N = br.readLine().toInt()

// ✅ Solve
// 출석 일수, 지각 일수, 연속 결석 일수
val dp = Array(N + 1, {Array(2, {Array(3, {0})})})

dp[1][0][0] = 1
dp[1][1][0] = 1
dp[1][0][1] = 1

for(i: Int in 2..N) {
dp[i][0][0] = (dp[i-1][0][0] + dp[i-1][0][1] + dp[i-1][0][2]) % 1000000;
dp[i][0][1] = dp[i-1][0][0] % 1000000;
dp[i][0][2] = dp[i-1][0][1] % 1000000;
dp[i][1][0] = (dp[i][0][0] + dp[i-1][1][0] + dp[i-1][1][1] + dp[i-1][1][2]) % 1000000;
dp[i][1][1] = dp[i-1][1][0] % 1000000;
dp[i][1][2] = dp[i-1][1][1] % 1000000;
}

var answer = 0
for(i: Int in 0..1) {
for(j: Int in 0..2) {
answer += dp[N][i][j]
}
}

print(answer % 1000000)
}
39 changes: 0 additions & 39 deletions jung0115/수학/tempCodeRunnerFile.kt

This file was deleted.

71 changes: 71 additions & 0 deletions jung0115/시뮬레이션/Programmers_92341.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
// 16차시 2024.10.05.토 : 프로그래머스 - 주차 요금 계산(Lv.2)
import java.util.HashMap

data class Record (
val time: Int,
val carNum: Int,
val isIn: Boolean
)

class Solution {
fun solution(fees: IntArray, records: Array<String>): IntArray {
val sortRecords: MutableList<Record> = mutableListOf()

// 주어진 기록을 파싱해서 Record 리스트로 변환
for(record: String in records) {
val current = record.split(" ")

val timeSplit = current[0].split(":")
val time: Int = timeSplit[0].toInt() * 60 + timeSplit[1].toInt()
val carNum: Int = current[1].toInt()
val isIn: Boolean = current[2] == "IN"

sortRecords.add(Record(time, carNum, isIn))
}

// 입차 중인 차량들의 입차 시간을 저장하는 맵
val inCars: HashMap<Int, Int> = HashMap()
// 자동차 번호별 총 주차 시간을 저장하는 맵
val parkingTimes: HashMap<Int, Int> = HashMap()

// 각 레코드를 처리
for(record: Record in sortRecords) {
if (record.isIn) {
// 입차 시 입차 시간을 기록
inCars[record.carNum] = record.time
} else {
// 출차 시 주차 시간을 계산하고 누적
val inTime: Int = inCars.remove(record.carNum) ?: 0
val parkingTime = record.time - inTime
parkingTimes[record.carNum] = parkingTimes.getOrDefault(record.carNum, 0) + parkingTime
}
}

// 출차하지 않은 차량은 23:59에 출차된 것으로 간주
val endTime = 23 * 60 + 59
for((carNum, inTime) in inCars) {
val parkingTime = endTime - inTime
parkingTimes[carNum] = parkingTimes.getOrDefault(carNum, 0) + parkingTime
}

// 자동차 번호 순으로 결과를 계산
val result: MutableList<Pair<Int, Int>> = mutableListOf()
for((carNum, parkingTime) in parkingTimes) {
var cost: Int = fees[1] // 기본 요금
val overTime = parkingTime - fees[0]

// 기본 시간을 넘은 경우 추가 요금을 계산
if (overTime > 0) {
cost += (overTime / fees[2]) * fees[3]
if (overTime % fees[2] > 0) {
cost += fees[3]
}
}

result.add(Pair(carNum, cost))
}

// 자동차 번호 순으로 정렬 후 요금만 반환
return result.sortedBy { it.first }.map { it.second }.toIntArray()
}
}
Loading