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
86 changes: 86 additions & 0 deletions 이광용/Main_23309_철도공사.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package Baekjoon;

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

public class Main_23309_철도공사 {
static StringBuilder sb = new StringBuilder();
public static class Station{
public int[] preNodes; //인덱스를 "해당 역의 고유번호"로 하고 값으로 "직전 역의 고유번호"를 가진다.
public int[] postNodes; //인덱스를 "해당 역의 고유번호"로 하고 값으로 "직후 역의 고유번호"를 가진다.

Station() {
preNodes = new int[1000001];
postNodes = new int[1000001];
}
public void add(int target, int node) {
if(target == -1) {
preNodes[node] = postNodes[node] = node;
return;
}
preNodes[node] = target;//새로 추가된 node의 직전 노드는 target으로 설정함
postNodes[node] = postNodes[target]; //target이 가리키던 노드를 새로 추가된 node의 직후 노드로 설정함
preNodes[postNodes[target]] = node;//target이 가리키고 있던 노드의 직전 노드를 새로 추가된 node로 설정
postNodes[target] = node; //target이 가리키는 노드는 새로 추가된 노드로 설정함
}
public void delete(int targetNode) {
//target의 직전 노드가 가리키는 노드를 target이 가리키는 노드로 설정해야함
postNodes[preNodes[targetNode]] = postNodes[targetNode];
//target의 직후 노드의 직전 노드는 target의 직전 노드로 설정해야함
preNodes[postNodes[targetNode]] = preNodes[targetNode];
}
void print(int num) {
sb.append(num+"\n");
}
}

public static void main(String[] args) throws Exception{
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());
Station station = new Station();
st = new StringTokenizer(br.readLine());
int target = -1;
for(int i = 0; i < n; i ++) {
int node = Integer.parseInt(st.nextToken());
station.add(target, node);
target = node;
}
for(int w = 0; w < m; w++) {
st = new StringTokenizer(br.readLine());
String type = st.nextToken();

int targetNode = Integer.parseInt(st.nextToken());
int newNode = 0;
if(st.hasMoreTokens()) {
newNode = Integer.parseInt(st.nextToken());
}

switch (type) {
case "BN":
//고유 번호 i를 가진 역의 다음 역의 고유번호를 출력하고 그 사이에 고육번호 j를 설립한다.
station.print(station.postNodes[targetNode]);
station.add(targetNode, newNode);
break;
case "BP":
station.print(station.preNodes[targetNode]);
station.add(station.preNodes[targetNode], newNode);
break;
case "CN":
//고유 번호 i를 가진 역의 다음 역을 폐쇄하고 그 역의 고유 번호를 출력한다.
station.print(station.postNodes[targetNode]);
station.delete(station.postNodes[targetNode]);
break;
case "CP":
//고유 번호 i를 가진 역의 이전 역을 폐쇄하고 그 역의 고유 번호를 출력한다.
station.print(station.preNodes[targetNode]);
station.delete(station.preNodes[targetNode]);
break;
}
}
System.out.println(sb.toString());
}

}
14 changes: 14 additions & 0 deletions 이광용/Solution_전화번호목록.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
Arrays.sort(phone_book);

for(int i = 0 ; i < phone_book.length-1; i++){
if(phone_book[i+1].startsWith(phone_book[i]))
return false;
}

return answer;
}
}