From 72fbc378ac280d044f64fc5951f4961cd0c058f6 Mon Sep 17 00:00:00 2001 From: smori Date: Tue, 23 Jul 2024 03:43:16 +0900 Subject: [PATCH] Add day22 --- Jongeun/Day22/51. N_Queens.cpp | 74 +++++++++++++++++++++ Jongeun/Day22/70_ClimbingStairs.cpp | 16 +++++ Jongeun/Day22/746_MinCostClimbingStairs.cpp | 17 +++++ 3 files changed, 107 insertions(+) create mode 100644 Jongeun/Day22/51. N_Queens.cpp create mode 100644 Jongeun/Day22/70_ClimbingStairs.cpp create mode 100644 Jongeun/Day22/746_MinCostClimbingStairs.cpp diff --git a/Jongeun/Day22/51. N_Queens.cpp b/Jongeun/Day22/51. N_Queens.cpp new file mode 100644 index 0000000..2933f30 --- /dev/null +++ b/Jongeun/Day22/51. N_Queens.cpp @@ -0,0 +1,74 @@ +class Solution +{ +public: + vector> solveNQueens(int n) + { + vector> result; + vector board; + for (int i = 0; i < n; i++) + { + string temp = ""; + for (int j = 0; j < n; j++) + { + temp.push_back('.'); + } + board.push_back(temp); + } + vector col(n + 1); + _solveNQueens(result, col, board, 0, n); + + return result; + } + + void _solveNQueens(vector> &result, vector &col, vector &board, int step, int n) + { + if (isPromising(col, step)) + { + if (step == n) + { + // push the col + for (int i = 1; i < n + 1; i++) + { + board[i - 1][col[i] - 1] = 'Q'; + } + result.push_back(board); + + // restore + for (int i = 1; i < n + 1; i++) + { + board[i - 1][col[i] - 1] = '.'; + } + + return; + } + else + { + for (int j = 1; j < n + 1; j++) + { + col[step + 1] = j; + _solveNQueens(result, col, board, step + 1, n); + } + } + } + } + + bool isPromising(vector &col, int step) + { + if (step == 0) + { + return true; + } + + int j = 1; + while (j < step) + { + if (col[step] == col[j] || abs(col[step] - col[j]) == (step - j)) + { + return false; + } + j++; + } + + return true; + } +}; diff --git a/Jongeun/Day22/70_ClimbingStairs.cpp b/Jongeun/Day22/70_ClimbingStairs.cpp new file mode 100644 index 0000000..13736b5 --- /dev/null +++ b/Jongeun/Day22/70_ClimbingStairs.cpp @@ -0,0 +1,16 @@ +class Solution +{ +public: + int climbStairs(int n) + { + vector table(46); + table[0] = 1; + table[1] = 1; + for (int i = 2; i < n + 1; i++) + { + table[i] = table[i - 1] + table[i - 2]; + } + + return table[n]; + } +}; diff --git a/Jongeun/Day22/746_MinCostClimbingStairs.cpp b/Jongeun/Day22/746_MinCostClimbingStairs.cpp new file mode 100644 index 0000000..d331c7d --- /dev/null +++ b/Jongeun/Day22/746_MinCostClimbingStairs.cpp @@ -0,0 +1,17 @@ +class Solution +{ +public: + int minCostClimbingStairs(vector &cost) + { + int size = cost.size(); + int first = 0; + int second = 0; + for (int i = 0; i < size - 1; i++) + { + int tempt = second; + second = min(first + cost[i], second + cost[i + 1]); + first = tempt; + } + return second; + } +};