반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 자료구조
- nGrinder
- exception
- Kafka
- flutter
- 운영체제
- Kotlin
- 코딩
- thread
- 연습문제
- Spring
- Sharding
- kakao
- OAuth
- 코드트리
- c
- 코딩 테스트
- Redis
- dip
- C언어
- hashmap
- pub.dev
- Scaffold
- Oidc
- 부하 테스트
- login
- AOP
- 코딩테스트
- java
- 코드 트리
Archives
- Today
- Total
Nick Dev
[코드트리] 1차원 폭발 게임(Java) 본문
반응형
문제
문제 링크
https://www.codetree.ai/missions/2/problems/The-1D-bomb-game?&utm_source=clipboard&utm_medium=text
내 코드
import java.util.*;
import java.io.*;
public class Main {
static int endOfArray;
static int[] arr;
static int n;
static int m;
public static void bomb() {
int[] tmp = new int[n];
int tmpIdx = 0; // 옮겨 담을 배열의 인덱스
int arrIdx = 0; // 현재 배열의 인덱스
while (arrIdx < endOfArray) {
int std = arr[arrIdx];
int stdIdx = arrIdx;
int count = 1;
while (++arrIdx < endOfArray && arr[arrIdx] == std) count++;
if (count < m) {
for (int i = stdIdx; i < arrIdx; i++) {
tmp[tmpIdx++] = arr[i];
}
}
}
arr = tmp;
endOfArray = tmpIdx;
}
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());
arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
// 연속된 1개면 모든 폭탄이 터짐 -> 굳이 배열 순회할 필요 없음
if (m == 1) {
System.out.println(0);
return;
}
endOfArray = n;
int before = n;
while (true) {
bomb();
// 배열의 개수가 이전과 변화가 없다면 더이상 m개 이상 연속된 폭탄이 없다는 의미
if (before == endOfArray) break;
before = endOfArray;
}
System.out.println(endOfArray);
for (int i = 0; i < endOfArray; i++) {
System.out.println(arr[i]);
}
}
}
설명
bomb()
arr
배열 순회- 매번 연속된 숫자가 있으면 그만큼
arrIdx
를 증가시킨다- 증가시킬 때, 연속된 원소의 개수를 세기 위해
count++
진행 - 구현하고 나서 보니깐 그냥
arrIdx - stdIdx
가 곧 연속된 원소의 개수였음..ㅋ
- 증가시킬 때, 연속된 원소의 개수를 세기 위해
- 그리고 나서
count
와m
을 비교함- 만약
m
개 이상 연속된 경우가 아니라면stdIdx
에서부터arrIdx
전까지 배열의 값들을tmp
로 옮긴다 - 만약
count < m
이라면 그냥 진행하면 된다- 이렇게 하면 자동적으로 연속된 숫자들을 건너뛴거랑 다름 없음
- 만약
- 외부
while
문이 끝나면arr
에tmp
를 넣고 배열의 끝을 원소 개수에 맞게 설정한다
main()
의 while
문
- 이전 배열의 길이를
before
변수에 넣어두고bomb()
진행 - 그 후, 이전 배열의 길이(
before
)와 현재 배열의 길이(endOfArray
)를 비교한다- 만약 길이가 같다면
m
개 이상 연속된 폭탄이 없다는 것 →while
탈출~~
- 만약 길이가 같다면
반응형
'코딩 테스트' 카테고리의 다른 글
[코드트리] 강력한 폭발(Java) (0) | 2025.01.02 |
---|---|
[코드트리] 아름다운 수(Java) (0) | 2024.12.31 |
[코드트리] 최적의 십자 모양 폭발(Java) (0) | 2024.12.31 |
[코드트리] 단 한 번의 2048 시도(Java) (0) | 2024.12.30 |
[코드트리] 2차원 바람(Java) (0) | 2024.12.28 |