반응형
올해 처음 접해봤는데, 실제 코딩 테스트와 유사한 방식으로 진행되어서 코테 준비할 때 도움이 많이 되는 것 같습니다!
반응형
'잡담' 카테고리의 다른 글
인프콘 너무 참여해보고 싶어서 올리는 글 (1) | 2023.07.24 |
---|---|
드디어 애드센스 승인되었네요! (0) | 2017.10.16 |
게임계정 해킹당했습니다. (1) | 2017.09.27 |
올해 처음 접해봤는데, 실제 코딩 테스트와 유사한 방식으로 진행되어서 코테 준비할 때 도움이 많이 되는 것 같습니다!
인프콘 너무 참여해보고 싶어서 올리는 글 (1) | 2023.07.24 |
---|---|
드디어 애드센스 승인되었네요! (0) | 2017.10.16 |
게임계정 해킹당했습니다. (1) | 2017.09.27 |
백준 싫은데요
https://www.acmicpc.net/problem/25916
전형적인 투 포인터 형태로 햄스터의 몸집을 구멍을 막았을 때 구멍의 크기m에 최대한 가까운 수를 찾아 출력하는 문제
⇒ while문 안에서 count의 값이 m보다 크면 left의 값을 count에서 뺀 후 left++, count의 값이 m보다 작거나 같으면 right의 값을 count에 더한 후 right++ 이 때 max의 값와 카운트의 값을 비교해 최댓값을 갱신
import java.io.*;
import java.util.*;
public class p25916 {
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[] a = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
//8 10
//2 2 2 2 11 2 5 2
//9
int left = 0;
int right = 0;
int max = Integer.MIN_VALUE;
int count = 0;
while (right < n) {
if (count +a[right] <= m) {
count += a[right];
max = Integer.max(max, count);
right++;
}else{
count -= a[left];
left++;
}
}
System.out.println(max);
}
}
투 포인터에 익숙해지기 좋은 문제였다
백준 16987 계란으로 계란치기 자바로 풀어 본 짧은 글 (0) | 2023.12.13 |
---|---|
백준 2866 문자열 잘라내기 자바로 풀어 본 짧은 글 (2) | 2023.12.08 |
백준 2805 나무 자르기 자바로 풀어 본 짧은 글 (2) | 2023.12.03 |
백준 16401 과자 나눠주기 자바로 풀어 본 짧은 글 (0) | 2023.12.02 |
백준 29812번 아니 이게 왜 안돼 자바로 풀어 본 짧은 글 (0) | 2023.12.01 |
백준 계란으로 계란치기
https://www.acmicpc.net/problem/16987
Egg 클래스를 선언해서 왼쪽부터 순서대로 들어서 해결
모든 경우의 수를 탐색해야 하기에, 백트래킹으로 진행
⇒
알을 꺼내는 방식은 순차적
꺼낸 알을 갖고 모든 알들에 시도해보기 (모든 경우의 수 탐색)
이후 최종 깊이에 도달하면 Egg의 깨져있는 수를 카운트
package Baekjoon.gold;
import java.io.*;
import java.util.*;
public class p16987 {
static int n;
static int max = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
ArrayList<Egg> eggList = new ArrayList<>();
StringTokenizer st;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
eggList.add(
new Egg(
Integer.parseInt(st.nextToken()),
Integer.parseInt(st.nextToken())
)
);
}
if (n == 1) {
System.out.println(0);
return;
}
boolean[] visited = new boolean[n];
dfs(eggList, 0, 0);
System.out.println(max);
}
public static void dfs(List<Egg> prevEggList, int index, int depth) {
if (depth == n) {
//전체 브로큰 횟수 출력
max = Integer.max(brokenCount(prevEggList), max);
return;
}
for (int i = 0; i < n; i++) {
List<Egg> nowEggList = deepCopy(prevEggList);
Egg nowEgg = nowEggList.get(depth);
if (i != depth) {
nowEgg.breakEgg(nowEggList.get(i));
dfs(nowEggList, 0, depth + 1);
}
}
}
static int brokenCount(List<Egg> eggList) {
int count = 0;
for (int i = 0; i < n; i++) {
if (eggList.get(i).isBroken()) {
count++;
}
}
return count;
}
static class Egg {
int durability;
int weight;
Egg(int durability, int weight) {
this.durability = durability;
this.weight = weight;
}
public void breakEgg(Egg egg) {
if (!egg.isBroken() && !this.isBroken()) {
attackEgg(egg);
}
}
private void attackEgg(Egg egg) {
int a = this.weight;
int b = egg.weight;
this.durability -= b;
egg.durability -= a;
}
private boolean isBroken() {
if (durability <= 0) {
return true;
}
return false;
}
}
public static List<Egg> deepCopy(List<Egg> eggList) {
ArrayList<Egg> tempList = new ArrayList<>();
for (int i = 0; i < eggList.size(); i++) {
Egg temp = eggList.get(i);
tempList.add(new Egg(temp.durability, temp.weight));
}
return tempList;
}
}
문제 구현이 생각보다 어려웠는데 이유를 모르겠음…
굳이 이유를 꼽자면 Egg의 상태를 확인해줄 때 헷갈렸던 것 같다.
속도는 클래스를 활용해서 그런지 상당히 느림 매번 깨져있는지 확인하면서 더 돌아서 느린듯?
백준 25916 싫은데요 자바로 풀어 본 짧은 글 (1) | 2023.12.21 |
---|---|
백준 2866 문자열 잘라내기 자바로 풀어 본 짧은 글 (2) | 2023.12.08 |
백준 2805 나무 자르기 자바로 풀어 본 짧은 글 (2) | 2023.12.03 |
백준 16401 과자 나눠주기 자바로 풀어 본 짧은 글 (0) | 2023.12.02 |
백준 29812번 아니 이게 왜 안돼 자바로 풀어 본 짧은 글 (0) | 2023.12.01 |