From 085f10d678f220933a4a54484e398141bd4c3208 Mon Sep 17 00:00:00 2001 From: Songwonseok Date: Tue, 31 Jan 2023 19:15:40 +0900 Subject: [PATCH] Algo: week3 --- .../01/week3/SWS/0070-climbing-stairs.java | 14 ++++ .../SWS/0168-excel-sheet-column-title.java | 32 +++++++++ .../week3/SWS/\352\267\270\353\246\274.java" | 63 ++++++++++++++++++ ...\342\200\205\352\262\214\354\236\204.java" | 38 +++++++++++ ...\355\224\274\355\225\230\352\270\260.java" | 66 +++++++++++++++++++ ...\352\261\260\355\225\230\352\270\260.java" | 27 ++++++++ 6 files changed, 240 insertions(+) create mode 100644 Algorithm/Solution/2023/01/week3/SWS/0070-climbing-stairs.java create mode 100644 Algorithm/Solution/2023/01/week3/SWS/0168-excel-sheet-column-title.java create mode 100644 "Algorithm/Solution/2023/01/week3/SWS/\352\267\270\353\246\274.java" create mode 100644 "Algorithm/Solution/2023/01/week3/SWS/\353\224\224\355\216\234\354\212\244\342\200\205\352\262\214\354\236\204.java" create mode 100644 "Algorithm/Solution/2023/01/week3/SWS/\354\235\214\354\213\235\353\254\274\342\200\205\355\224\274\355\225\230\352\270\260.java" create mode 100644 "Algorithm/Solution/2023/01/week3/SWS/\355\203\235\353\260\260\342\200\205\353\260\260\353\213\254\352\263\274\342\200\205\354\210\230\352\261\260\355\225\230\352\270\260.java" diff --git a/Algorithm/Solution/2023/01/week3/SWS/0070-climbing-stairs.java b/Algorithm/Solution/2023/01/week3/SWS/0070-climbing-stairs.java new file mode 100644 index 0000000..20bbdc4 --- /dev/null +++ b/Algorithm/Solution/2023/01/week3/SWS/0070-climbing-stairs.java @@ -0,0 +1,14 @@ +class Solution { + + public int climbStairs(int n) { + int[] dp = new int[46]; + dp[1] = 1; + dp[2] = 2; + + for(int i = 3; i <= n; i++) { + dp[i] = dp[i - 1] + dp[i - 2]; + } + + return dp[n]; + } +} \ No newline at end of file diff --git a/Algorithm/Solution/2023/01/week3/SWS/0168-excel-sheet-column-title.java b/Algorithm/Solution/2023/01/week3/SWS/0168-excel-sheet-column-title.java new file mode 100644 index 0000000..355d770 --- /dev/null +++ b/Algorithm/Solution/2023/01/week3/SWS/0168-excel-sheet-column-title.java @@ -0,0 +1,32 @@ +class Solution { + public char convertToAlphabet(int num) { + int startAscii = (int)'A' - 1; + + if(num == 0) { + return 'Z'; + } + + return (char)(startAscii + num); + } + + public String convertToTitle(int columnNumber) { + // 26진수 + StringBuilder sb = new StringBuilder(); + + while(columnNumber > 26) { + int mod = columnNumber % 26; + sb.append(convertToAlphabet(mod)); + + columnNumber /= 26; + + if(mod == 0) { + columnNumber--; + } + + } + + sb.append(convertToAlphabet(columnNumber)); + + return sb.reverse().toString(); + } +} \ No newline at end of file diff --git "a/Algorithm/Solution/2023/01/week3/SWS/\352\267\270\353\246\274.java" "b/Algorithm/Solution/2023/01/week3/SWS/\352\267\270\353\246\274.java" new file mode 100644 index 0000000..4de7cee --- /dev/null +++ "b/Algorithm/Solution/2023/01/week3/SWS/\352\267\270\353\246\274.java" @@ -0,0 +1,63 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class Main { + static int[] DIR_ROW = {-1, 1, 0, 0}, DIR_COL = {0, 0, -1, 1}; // 상하좌우 + static int paintSize; + public static void findPaint(int[][] board, int r, int c) { + paintSize++; + board[r][c] = 0; + + int maxRow = board.length; + int maxCol = board[0].length; + + for(int i = 0; i < 4; i++) { + int nr = r + DIR_ROW[i]; + int nc = c + DIR_COL[i]; + + if(nr < 0 || nr >= maxRow || nc < 0 ||nc == maxCol || board[nr][nc] == 0) { + continue; + } + + findPaint(board, nr, nc); + } + + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + StringTokenizer st = new StringTokenizer(br.readLine()); + + int n = Integer.parseInt(st.nextToken()); + int m = Integer.parseInt(st.nextToken()); + + int[][] board = new int[n][m]; + + for (int i = 0; i < n; i++) { + st = new StringTokenizer(br.readLine()); + + for (int j = 0; j < m; j++) { + board[i][j] = Integer.parseInt(st.nextToken()); + } + } + + int count = 0; + int maxSize = 0; + + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + if(board[i][j] == 1) { + count++; + paintSize = 0; + findPaint(board, i, j); + maxSize = Math.max(paintSize, maxSize); + } + } + } + + System.out.println(count + "\n" + maxSize); + } +} \ No newline at end of file diff --git "a/Algorithm/Solution/2023/01/week3/SWS/\353\224\224\355\216\234\354\212\244\342\200\205\352\262\214\354\236\204.java" "b/Algorithm/Solution/2023/01/week3/SWS/\353\224\224\355\216\234\354\212\244\342\200\205\352\262\214\354\236\204.java" new file mode 100644 index 0000000..38249c8 --- /dev/null +++ "b/Algorithm/Solution/2023/01/week3/SWS/\353\224\224\355\216\234\354\212\244\342\200\205\352\262\214\354\236\204.java" @@ -0,0 +1,38 @@ +import java.util.*; + +class Solution { + public int solution(int n, int k, int[] enemy) { + int finalRound = enemy.length; + + if(finalRound <= k) { + return finalRound; + } + + PriorityQueue pq = new PriorityQueue(Collections.reverseOrder()); + + for(int i = 0; i < finalRound; i++) { + pq.add(enemy[i]); + + if(n >= enemy[i]) { + n -= enemy[i]; + continue; + } + + if(k == 0) { + return i; + } + + n += pq.poll(); + k--; + + if(n < enemy[i]) { + return i; + } + + n -= enemy[i]; + } + + + return finalRound; + } +} \ No newline at end of file diff --git "a/Algorithm/Solution/2023/01/week3/SWS/\354\235\214\354\213\235\353\254\274\342\200\205\355\224\274\355\225\230\352\270\260.java" "b/Algorithm/Solution/2023/01/week3/SWS/\354\235\214\354\213\235\353\254\274\342\200\205\355\224\274\355\225\230\352\270\260.java" new file mode 100644 index 0000000..7f1aaf9 --- /dev/null +++ "b/Algorithm/Solution/2023/01/week3/SWS/\354\235\214\354\213\235\353\254\274\342\200\205\355\224\274\355\225\230\352\270\260.java" @@ -0,0 +1,66 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.LinkedList; +import java.util.Queue; +import java.util.StringTokenizer; + +public class Main { + static int[] DIR_ROW = {-1, 1, 0, 0}, DIR_COL = {0, 0, -1, 1}; // 상하좌우 + static int size; + + public static void findWaste(boolean[][] path, int r, int c) { + size++; + path[r][c] = false; + + int maxRow = path.length; + int maxCol = path[0].length; + + for(int i = 0; i < 4; i++) { + int nr = r + DIR_ROW[i]; + int nc = c + DIR_COL[i]; + + if(nr < 0 || nr >= maxRow || nc < 0 ||nc == maxCol || !path[nr][nc]) { + continue; + } + + findWaste(path, nr, nc); + } + + } + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + StringTokenizer st = new StringTokenizer(br.readLine()); + + int N = Integer.parseInt(st.nextToken()); + int M = Integer.parseInt(st.nextToken()); + int K = Integer.parseInt(st.nextToken()); + + boolean[][] path = new boolean[N][M]; + + for (int i = 0; i < K; i++) { + st = new StringTokenizer(br.readLine()); + + int r = Integer.parseInt(st.nextToken()) - 1; + int c = Integer.parseInt(st.nextToken()) - 1; + + path[r][c] = true; + } + + int maxSize = 0; + + for (int i = 0; i < N; i++) { + for (int j = 0; j < M; j++) { + if(path[i][j]) { + size = 0; + findWaste(path, i, j); + maxSize = Math.max(size, maxSize); + } + } + } + + System.out.println(maxSize); + } +} \ No newline at end of file diff --git "a/Algorithm/Solution/2023/01/week3/SWS/\355\203\235\353\260\260\342\200\205\353\260\260\353\213\254\352\263\274\342\200\205\354\210\230\352\261\260\355\225\230\352\270\260.java" "b/Algorithm/Solution/2023/01/week3/SWS/\355\203\235\353\260\260\342\200\205\353\260\260\353\213\254\352\263\274\342\200\205\354\210\230\352\261\260\355\225\230\352\270\260.java" new file mode 100644 index 0000000..761c9a5 --- /dev/null +++ "b/Algorithm/Solution/2023/01/week3/SWS/\355\203\235\353\260\260\342\200\205\353\260\260\353\213\254\352\263\274\342\200\205\354\210\230\352\261\260\355\225\230\352\270\260.java" @@ -0,0 +1,27 @@ +class Solution { + public long solution(int cap, int n, int[] deliveries, int[] pickups) { + long answer = 0; + + int length = deliveries.length; + int dBox = 0; + int pBox = 0; + + for(int i = length - 1; i >= 0; i--) { + int cnt = 0; + + while(dBox < deliveries[i] || pBox < pickups[i]) { + dBox += cap; + pBox += cap; + cnt++; + } + + dBox -= deliveries[i]; + pBox -= pickups[i]; + + answer += (long)((i + 1) * cnt * 2); + } + + + return answer; + } +} \ No newline at end of file