Skip to content
Open
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
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,12 @@
/coding_test_study.iml
/out/
/coding_test_study/.idea/workspace.xml
/build.gradle
/gradlew
/gradlew.bat
/settings.gradle
/src/main/java/week01/
/src/main/java/week02/
/src/main/java/week03/
/src/main/java/week04/
/src/main/java/week05/
88 changes: 88 additions & 0 deletions src/main/java/week11/gahyun/p1/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package week11.gahyun.p1;

/**
* 2x2์ด๋ฏ€๋กœ dfs์•„๋‹Œ ์™„์ „ ํƒ์ƒ‰
* ํ—ท๊ฐˆ๋ฆฐ์ :
* (1) ๋ธ”๋ก ๋‚ด๋ฆฌ๊ธฐ
* - block[r] ์•„๋ž˜๋ถ€ํ„ฐ ์œ„๋กœ ํƒ์ƒ‰
* - writeRow๋Š” ์–ด๋””๊นŒ์ง€ ์ผ๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ํฌ์ธํ„ฐ (r๊ณผ ๋™์ผํ•˜๊ฒŒ ์•„๋ž˜๋ถ€ํ„ฐ)
* - if) block[r] ๋นˆ์นธ ์•„๋‹ˆ๋ฉด
* - block[writeRow] = block[r]
* - writeRow--;
* - writeRow ~ 0๊นŒ์ง€ ๋นˆ์นธ์œผ๋กœ ์ฑ„์šฐ๊ธฐ
* (2) mark ๋ฐฐ์—ด ๋‘ฌ์•ผ ํ•จ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด๋กœ ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€
*/

class Solution {
static char[][] block;
static boolean[][] marked;
public int solution(int m, int n, String[] board) {
int totalRemoveCnt = 0;
block = new char[m][n];
marked = new boolean[m][n];

initBlock(board,m,n); //board-> block

while (true){
//1) 2x2 ์ฒดํฌ
mark(m,n);

//2) ์ฒดํฌ๋œ ๊ณณ ๋นˆ์นธ ์ฒ˜๋ฆฌ
int removeCnt = erase(m,n);
if (removeCnt==0) break;
totalRemoveCnt+=removeCnt;

//3) ์ง€์›Œ์ง„ ๊ณณ ์ฑ„์šฐ๊ธฐ
fall(m,n);
}

return totalRemoveCnt;
}

private static void fall(int m, int n) {
for (int c = 0; c < n; c++) {
int writeRow = m-1;
for (int r=m-1;r>=0;r--){
if (block[r][c]!=' '){
block[writeRow][c] = block[r][c];
writeRow--;
}
}
for (int r = writeRow;r>=0;r--){
block[r][c] = ' ';
}
}
}

private static int erase(int m, int n){
int removeCnt =0;
for (int r=0;r<m;r++){
for (int c=0;c<n;c++){
if (marked[r][c]) {
block[r][c] = ' ';
removeCnt++;
}
}
}
return removeCnt;
}

private static void mark(int m, int n){ //2x2 ์ฒดํฌ
marked = new boolean[m][n];

for (int r=0;r<m-1;r++){
for (int c=0;c<n-1;c++){
char key = block[r][c];
if (key==' ') continue;
if (block[r+1][c]!=key||block[r][c+1]!=key||block[r+1][c+1]!=key) continue;
marked[r][c] = true; marked[r+1][c] = true; marked[r][c+1] = true; marked[r+1][c+1] = true;
}
}
}

private static void initBlock(String[] board,int m, int n){
for (int r=0;r<m;r++){
block[r] = board[r].toCharArray();
}
}
}
37 changes: 37 additions & 0 deletions src/main/java/week11/gahyun/p2/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package week11.gahyun.p2;

import java.util.LinkedList;
import java.util.Queue;

/**
* ์ฒ˜์Œ์—๋Š” truckํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ time์„ ๊ณ„์† ์ฐจ๊ฐํ•ด์•ผ ํ•˜๋‚˜ ๊ณ ๋ฏผํ•จ
* ํ๋ฅผ ๋งŒ๋“ค๊ณ , ํŠธ๋Ÿญ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์„ ๋•Œ๋Š” 0์„ ์ถ”๊ฐ€ํ•ด์„œ ๊ด€๋ฆฌํ•˜๋ฉด ๋๋˜ ๋ฌธ์ œ
*/
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
//๋‹ค๋ฆฌ ์ดˆ๊ธฐํ™”
Queue<Integer> bridge = new LinkedList<>();
for (int i=0;i<bridge_length;i++){
bridge.offer(0);
}

int ind = 0; //๋„ฃ์„ ํŠธ๋Ÿญ
int time = 0; //๊ฒฝ๊ณผ ์‹œ๊ฐ„
int load_w = 0; // ๋‹ค๋ฆฌ ์œ„ ๋ฌด๊ฒŒ

// ๋‹ค ๊ฑด๋„ˆ์ง€ ์•Š์•˜๊ฑฐ๋‚˜, ๋‹ค๋ฆฌ ์œ„์— ํŠธ๋Ÿญ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
while (ind<truck_weights.length||load_w>0){
time++;
load_w-=bridge.poll(); // ํŠธ๋Ÿญ ๊ฑด๋„˜ -> ๋ฌด๊ฒŒ ์ฐจ๊ฐ

if (ind<truck_weights.length&&truck_weights[ind]<=weight-load_w){//ํ˜„์žฌ ํŠธ๋Ÿญ ๊ฑด๋„ ์ˆ˜ ์žˆ์Œ
bridge.offer(truck_weights[ind]);
load_w+=truck_weights[ind++]; //ํŠธ๋Ÿญ ์˜ฌ๋ฆฌ๊ธฐ -> ๋ฌด๊ฒŒ ์ฆ๊ฐ€
}
else bridge.offer(0); //ํ˜„์žฌ ํŠธ๋Ÿญ ๊ฑด๋„ ์ˆ˜ ์—†์Œ
}

return time;
}
}

32 changes: 32 additions & 0 deletions src/main/java/week11/gahyun/p3/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package week11.gahyun.p3;

import java.util.*;

/**
* ์ ‘๊ทผ ๋ฐฉ์‹
* - ์ฒ˜์Œ์—๋Š” Queue๋กœ ํ’€์—ˆ๋Š”๋ฐ splitํ•˜๋Š”๊ฒŒ ๋” ํšจ์œจ์ 
* - 0+๋Š” 0์ด ํ•œ๊ฐœ ์ด์ƒ์ธ ๊ฒƒ
* - n์„ k์ง„์ˆ˜๋กœ ๋ณ€ํ™˜: Intereger.toString(n,k)
*/
class Solution {
public int solution(int n, int k) {
int cnt = 0;

String numK = Integer.toString(n,k);
String[] subset = numK.split("0+");
for (String num : subset){
if (num.equals("")) continue;
if (isPrime(Long.parseLong(num))) cnt++;
}

return cnt;
}

private static boolean isPrime(long num){ //์†Œ์ˆ˜์—ฌ๋ถ€ ํŒ๋ณ„
if (num<2) return false;
for (long i=2;i*i<=num;i++){
if (num%i==0) return false;
}
return true;
}
}
34 changes: 34 additions & 0 deletions src/main/java/week11/gahyun/p4/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package week11.gahyun.p4;

import java.util.Stack;

class Solution {
public int solution(int[] order) {
//๋ฐ•์Šค ์ดˆ๊ธฐํ™”
int[] boxes = new int[order.length];
Stack<Integer> stk = new Stack<>();
int boxInd = 0,cnt = 0;

for (int i=0;i<order.length;i++)
boxes[i] = i+1;


for (int orderInd=0;orderInd<order.length;orderInd++){
int target = order[orderInd];
if (!stk.isEmpty()&&stk.peek()==target){ //ํƒ€๊นƒ์ด ์Šคํƒ ์ƒ๋‹จ์— ์žˆ์„ ๊ฒฝ์šฐ
stk.pop(); cnt++;
continue;
}
while (boxInd<order.length&&boxes[boxInd]!=target){//ํƒ€๊นƒ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์Šคํƒ์— ์‚ฝ์ž…
stk.push(boxes[boxInd]);
boxInd++;
}
if (boxInd<order.length&&boxes[boxInd]==target){
cnt++; boxInd++;
}
else break;
}

return cnt;
}
}
83 changes: 83 additions & 0 deletions src/main/java/week11/gahyun/p5/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package week11.gahyun.p5;

import java.util.*;

/**
* ์ฐจ ๊ฐ์ฒด ์ƒ์„ฑํ•ด์„œ ์‹œ๊ฐ„ ๊ด€๋ฆฌ
* map : ์ฐจ๋ฒˆํ˜ธ-์ฐจ ๊ฐ์ฒด
* ์ฐจ๋ฒˆํ˜ธ๋กœ ์ •๋ ฌ -> TreeMap
*/
class Solution {
public int[] solution(int[] fees, String[] records) {

Map<String, Car> map = new TreeMap<>(); //์ฐจ๋ฒˆํ˜ธ, ์ฐจ
for (String record: records){
String[] data = record.split(" ");

String[] time = data[0].split(":");
int hour = Integer.valueOf(time[0]);
int min = Integer.valueOf(time[1]);

String carNum = data[1];
String cmd = data[2];
if (!map.containsKey(carNum)){
map.put(carNum,new Car());
}

Car car = map.get(carNum);
if (cmd.equals("IN")){
car.entry(hour,min);
}
else {
car.out(hour,min);
}

}

int[] answer = new int[map.size()];
int idx = 0;
for (Car car:map.values()){
answer[idx++] = calculateFee(fees, car);
}

return answer;
}

private int calculateFee(int[] fees, Car car){
int defaultMin = fees[0];
int defaultFee = fees[1];
int overMin = fees[2];
int overFee = fees[3];

int totalTime = car.getTotalTime();

if (totalTime<=defaultMin) return defaultFee;
else
return defaultFee+(int)Math.ceil((totalTime-defaultMin)*1.0/overMin)*overFee;
}
}

class Car {
boolean isEntry; //์ž…์ฐจ ์—ฌ๋ถ€
int entryHour; //์ž…์ฐจ ์‹œ๊ฐ„
int entryMin; //์ž…์ฐจ ๋ถ„
int totalTime = 0;

public void entry(int entryHour, int entryMin){//์ž…์ฐจ
this.entryHour = entryHour;
this.entryMin = entryMin;
isEntry = true;
}

public void out(int outHour, int outMin){ //์ถœ์ฐจ
totalTime+= (outHour-entryHour)*60+(outMin-entryMin); //์ฃผ์ฐจ ์‹œ๊ฐ„ ๋ˆ„์ 
isEntry = false;
}

public int getTotalTime(){ //๋ˆ„์ ์‹œ๊ฐ„ ๋ฐ˜ํ™˜
if (isEntry){//์•„์ง ์ถœ์ฐจ ์•ˆํ•จ
totalTime+= (23-entryHour)*60+(59-entryMin);
}
return totalTime;
}
}
49 changes: 49 additions & 0 deletions src/main/java/week11/gahyun/p6/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package week11.gahyun.p6;

import java.util.*;

/**๋ฌธ์ œ ์š”์•ฝ
* - ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋‹จ์–ด ์ดˆ๊ธฐํ™”
* - ๋‹จ์–ด ์ผ์ • ๋ถ€๋ถ„ ์ž๋ฅด๊ธฐ
* - ํ•ด๋‹น ๋‹จ์–ด ์žˆ์œผ๋ฉด ํ•œ ๊ธ€์ž ๋”ํ•ด์„œ ์ƒˆ๋กœ์šด ๋‹จ์–ด ๋งŒ๋“ฆ
* - ๊ธฐ์กด ๋‹จ์–ด์˜ ์‚ฌ์ „ ๋ฒˆํ˜ธ ์ถœ๋ ฅ
* - ์ƒˆ๋กœ์šด ๋‹จ์–ด ์‚ฌ์ „์— ์ €์žฅ
* ํ—ท๊ฐˆ๋ฆฐ ์ 
* - w+=c๋ฅผ ํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ nextIdx๊ณ„์† ๋”ํ•ด์„œ substringํ•˜๊ธฐ
*/
class Solution {
public int[] solution(String msg) {
Map<String, Integer> dict = new HashMap<>();
List<Integer> output = new ArrayList<>();
initDict(dict);
int curIdx = 0, dictIdx=27;

while (curIdx<msg.length()){
int nextIdx = curIdx+1;
String w = ""+msg.charAt(curIdx);
while (nextIdx<=msg.length()&&dict.containsKey(msg.substring(curIdx,nextIdx))){
w = msg.substring(curIdx,nextIdx);
nextIdx++;
}
output.add(dict.get(w)); // ๊ธฐ์กด ๋‹จ์–ด ์ฐพ๊ธฐ

if (nextIdx<=msg.length())
dict.put(msg.substring(curIdx,nextIdx),dictIdx++); //์ƒˆ๋กœ์šด ๋‹จ์–ด ์ถ”๊ฐ€
curIdx += w.length();
}

int[] answer = new int[output.size()];
for (int i=0;i<output.size();i++){
answer[i] = output.get(i);
}

return answer;
}

private static void initDict(Map<String, Integer> dict){
int dictIdx = 1;
for (char c = 'A';c<='Z';c++){
dict.put(c+"",dictIdx++);
}
}
}
38 changes: 38 additions & 0 deletions src/main/java/week11/gahyun/p7/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package week11.gahyun.p7;

import java.util.*;

/**
* ์ ‘๊ทผ ๋ฐฉ๋ฒ•: ๊ฐ ๋ถ„์„ ์ธ๋ฑ์Šคํ™”ํ•˜์—ฌ ์นด์šดํŠธ
*/
class Solution {
static int maxCnt = 0;
public int solution(String[][] book_time) {
int limit = 23*60+59;
int[] cnt = new int[limit+1]; //00:00~23:59 ์ ์œ  ๊ฐ์‹ค ์ˆ˜

for (int i=0;i<book_time.length;i++){
String startTime = book_time[i][0];
String endTime = book_time[i][1];

int startH = Integer.valueOf(startTime.split(":")[0]);
int startM = Integer.valueOf(startTime.split(":")[1]);
int endH = Integer.valueOf(endTime.split(":")[0]);
int endM = Integer.valueOf(endTime.split(":")[1]);

int startIdx = startH*60+startM;
int endIdx = endH*60+endM+9;
if (endIdx>limit) endIdx = limit;
occupy(startIdx, endIdx,cnt);
}

return maxCnt;
}

private static void occupy(int startIdx, int endIdx, int[] cnt){
for (int i=startIdx;i<=endIdx;i++){
cnt[i]++;
maxCnt = Math.max(cnt[i],maxCnt);
}
}
}
Loading