| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
Tags
- 데이터바인딩
- kotlin
- 안드로이드 스튜디오
- include태그
- include이벤트처리
- 리사이클러뷰
- Hilt
- 안드로이드 스튜디오 API
- 안드로이드 스튜디오 JAVA
- SpringBoot
- SpringWebFlux
- 종속항목삽입
- 프론트엔드
- 안드로이드로딩창
- 공공데이터포털리사이클러뷰
- hilt오류
- 자바
- glide
- 안드로이드스튜디오
Archives
- Today
- Total
내일은개발왕
백준 - 5430번 AC 본문
import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) throws IOException { //이문제도 입력받은 배열형태를 연결리스트로 바꿔서 풀거임 배열로 하면 넘오래걸려..
//스택이 더 효율적이긴 할듯
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder str = new StringBuilder(); //이어붙여서 한번에 출력할거임
int data = Integer.parseInt(br.readLine());
Deque<String> dq = new LinkedList<>(); //연결리스트 사용해서 풀거임
boolean R = false;
int check = 0;
for(int i = 0; i < data; i++) { //테스트 케이스 개수 만큼 이를 반복할건데
String order = br.readLine(); // 명령어 입력받고
int count = Integer.parseInt(br.readLine()); //배열에 들어갈 수 개수 (반복할 횟수)
String array = br.readLine(); //사용자가 입력한 배열[]
array = array.substring(1, array.length() - 1); //양 끝 []없애주고
if(array.length() == 0) { //없앴는데 0이라면 구할 수가 없으므로
for(int a = 0; a < order.length(); a++) {
if(order.charAt(a) == 'D') {
check = -1;
} else {
R = false;
}
}
} else {
String[] li = array.split(",");
for(int k = 0; k < li.length; k++) { //배열 길이만큼
dq.add(li[k]);
}
for(int j = 0; j < order.length(); j++) { //명령어 길이만큼
if(order.charAt(j) == 'R') { //명령어가 R이면 거꾸로 뒤집는거
if(R == false) { //거꾸로
R = true;
} else if(R = true){ //한 번 더 뒤집기
R = false;
}
} else { //D인경우,
if(R == true && dq.size() != 0) {
dq.removeLast(); //뒤집었으니 뒤에서부터 제거
} else if(R == false && dq.size() != 0) {
dq.removeFirst(); //뒤집은거 다시 되돌렸으니 앞에서부터 제거
} else if (dq.size() == 0) {
check = -1;
}
}
}
}
int c = dq.size(); //몇번 돌았는지 확인 할 변수 (거꾸로일때)
int c2 = dq.size(); //몇번 돌았는지 확인 할 변수 (거꾸로아닐때)
if(R == true && check >= 0) { //거꾸로일때
if(dq.size() == 0) {
str.append("[]").append("\n");
} else {
str.append("[");
Iterator<String> iterator = dq.descendingIterator(); //읽어들일꺼 생성해주고, 거꾸로 읽을꺼임
while(iterator.hasNext() && c != -1) {
if(c == 1) {
str.append(iterator.next());
--c;
} else {
str.append(iterator.next()+",");
--c;
}
}
str.append("]").append("\n");
}
} else if(R == false && check >= 0) {
if(dq.size() == 0) {
str.append("[]").append("\n");
} else {
str.append("[");
Iterator<String> iterator = dq.iterator();
while(iterator.hasNext() && c2 != -1) {
if(c2 == 1) {
str.append(iterator.next());
--c2;
} else {
str.append(iterator.next()+",");
--c2;
}
}
str.append("]").append("\n");
}
} else if( check == -1) {
str.append("error").append("\n");
}
dq.clear(); // 초기화해주기
R = false;
check = 0;
} // 맨 위 for문
bw.write(str.toString());
bw.close();
}
}
첫 골드 문제를 풀었다!
주석을 전부 달아놨기 때문에 굳이 설명을 더 넣지는 않겠다.
주석 다는게 습관이 되어서.. 아마 앞으로 올릴 모든 코드에 주석이 달려있을 것이다.