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
29 changes: 29 additions & 0 deletions BOJ/[1927] 최소 힙/leesuyong849/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package BOJ_1927_최소힙;

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

public class Main {

static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();

PriorityQueue<Integer> que = new PriorityQueue<>();
for (int i = 0; i < N; i++) {
int a = Integer.parseInt(br.readLine());

if (a == 0) {
if (!que.isEmpty()) sb.append(que.poll()).append('\n');
else sb.append("0").append('\n');
} else
que.add(a);
}

System.out.println(sb);
}
}
63 changes: 63 additions & 0 deletions BOJ/[19637] IF문 좀 대신 써줘/leesuyong849/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package BOJ_19637_IF문;

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

public class Main {

static class Item implements Comparable<Item> {
String name;
int value;

Item(String name, int value) {
this.name = name;
this.value = value;
}

@Override
public int compareTo(Item o) {
return Integer.compare(this.value, o.value);
}
}

static int N, M;
static List<Item> map;

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
String[] name = new String[N];
int[] value = new int[N];

for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
name[i] = st.nextToken();
value[i] = Integer.parseInt(st.nextToken());
}


StringBuilder sb = new StringBuilder();

for (int i = 0; i < M; i++) {
int x = Integer.parseInt(br.readLine());
int idx = lowerBound(value, x);
sb.append(name[idx]).append('\n');
}

System.out.println(sb);
}

static int lowerBound(int[] arr, int target) {
int l = 0, r = arr.length; // [l, r)
while (l < r) {
int mid = (l + r) >>> 1;
if (arr[mid] >= target) r = mid;
else l = mid + 1;
}
return l;
}
}
42 changes: 42 additions & 0 deletions BOJ/[20310] 타노스/leesuyong849/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package BOJ_20310_타노스;

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

public class Main {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int cnt0 = 0;
String s = br.readLine();
int length = s.length();

for (int i = 0; i < length; i++) {
if (s.charAt(i) == '0') cnt0++;
}

int cnt1 = length - cnt0;
int remove1 = cnt1 / 2;
int remove0 = cnt0 / 2;

StringBuilder sb = new StringBuilder(s);


for (int i = 0; i < sb.length() && remove1 > 0; i++) {
if (sb.charAt(i) == '1') {
sb.deleteCharAt(i);
remove1--;
i--; // 삭제하면 인덱스 당겨지므로 보정
}
}

for (int i = sb.length() - 1; i >= 0 && remove0 > 0; i--) {
if (sb.charAt(i) == '0') {
sb.deleteCharAt(i);
remove0--;
}
}
System.out.println(sb);
}
}
50 changes: 50 additions & 0 deletions BOJ/[22233] 가희와 키워드/leesuyong849/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package BOJ_22233_가희와키워드;

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

public class Main {

static int N, M;
static HashMap<String, Boolean> map;

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new HashMap<>();


for (int i = 0; i < N; i++) {
map.put(br.readLine(), false);
}

StringBuilder sb = new StringBuilder();

for (int i = 0; i < M; i++) {
String s = br.readLine();
String[] split = s.split(",");

//map에서 찾아서 true로 변환
for (String s1 : split) {
map.computeIfPresent(s1, (k, v) -> true);
}

Set<String> keys = map.keySet();
int cnt = 0;
for (String key : keys) {
Boolean aBoolean = map.get(key);
if (!aBoolean) cnt++;
}

sb.append(cnt).append('\n');
}

System.out.println(sb);
}
}
42 changes: 42 additions & 0 deletions BOJ/[22233] 가희와 키워드/leesuyong849/Main2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package BOJ_22233_가희와키워드;

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

public class Main2 {
static int N, M;
static HashSet<String> map;

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
map = new HashSet<>();

for (int i = 0; i < N; i++) {
map.add(br.readLine());
}

//아직 남아 있는 수
int result = N;
StringBuilder sb = new StringBuilder();

for (int i = 0; i < M; i++) {
String line = br.readLine();
String[] split = line.split(",");

for (String s : split) {
if (map.remove(s)) result--;
}

sb.append(result).append('\n');
}

System.out.println(sb);
}
}
72 changes: 72 additions & 0 deletions BOJ/[22251] 빌런 호석/leesuyong849/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package BOJ_22251_빌런호석;

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

public class Main {

static int N, K, P, X;
static int[][] display = {{1, 1, 1, 0, 1, 1, 1}, //0
{0, 0, 1, 0, 0, 0, 1}, //1
{0, 1, 1, 1, 1, 1, 0}, //2
{0, 1, 1, 1, 0, 1, 1}, //3
{1, 0, 1, 1, 0, 0, 1}, //4
{1, 1, 0, 1, 0, 1, 1}, //5
{1, 1, 0, 1, 1, 1, 1}, //6
{0, 1, 1, 0, 0, 0, 1}, //7
{1, 1, 1, 1, 1, 1, 1}, //8
{1, 1, 1, 1, 0, 1, 1}}; //9

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); //표시되는 수가 이 수 아래
K = Integer.parseInt(st.nextToken()); //자리수
P = Integer.parseInt(st.nextToken()); //최대 반전시킬 계획
X = Integer.parseInt(st.nextToken()); //현제엘리베이터 위치

int[] myNum;

myNum = numToDigit(X);

int check = check(myNum);
System.out.println(check);
}

public static int check(int[] digit) {
int cnt = 0;
for (int i = 1; i <= N; i++) {
if (i == X) continue;
if (ableReverse(i, digit)) cnt++;
}

return cnt;
}

public static boolean ableReverse(int target, int[] myNum) {
int[] targetToDigit = numToDigit(target);
int changeCal = 0;

for (int i = 0; i < K; i++) {
int form = myNum[i];
int to = targetToDigit[i];
if (form == to) continue;

for (int j = 0; j < 7; j++) {
if (display[form][j] != display[to][j]) changeCal++;
}
}
return changeCal <= P;
}

public static int[] numToDigit(int x) {
int[] result = new int[K];
for (int i = K - 1; i >=0; i--) {
result[i] = x % 10;
x /= 10;
}
return result;
}
}
85 changes: 85 additions & 0 deletions BOJ/[7490] 0 만들기/leesuyong849/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package BOJ_7490_0만들기;

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

public class Main {

static char[] ops;
static int N, C;
static StringBuilder sb = new StringBuilder();

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

sb = new StringBuilder();

for (int i = 0; i < N; i++) {
C = Integer.parseInt(br.readLine());
ops = new char[C - 1];
solve(C);

if (i != N - 1) sb.append('\n');
}

System.out.println(sb);
}

static void solve(int c) {

dfs(0);
}

public static void dfs(int idx) {
if (idx == C - 1) {
if (evaluate() == 0) {
sb.append(builder()).append('\n');
}
return;
}

//부호를 저장하고 다음 단계로 간다.
ops[idx] = ' ';
dfs(idx + 1);

ops[idx] = '+';
dfs(idx + 1);

ops[idx] = '-';
dfs(idx + 1);
}

public static String builder() {
StringBuilder sbn = new StringBuilder();
sbn.append("1");
for (int i = 0; i < C - 1; i++) {
sbn.append(ops[i]).append(i + 2);
}
return sbn.toString();
}

public static long evaluate() {
long result = 0;
long num = 1;
int sign = 1;

for (int i = 0; i < C - 1; i++) {
char op = ops[i];
int next = i + 2;

if (op == ' ') {
num = num * 10 + next;
} else {
//이전에 갱신된 부호와 값을 반영한다.
result += sign * num;
//다음 사이클을 위해 부호와 값을 반영한다.
sign = (op == '+') ? 1 : -1;
num = next;
}
}
result += sign * num;
return result;
}
}