728x90
https://programmers.co.kr/learn/courses/30/lessons/81303#qna
코딩테스트 연습 - 표 편집
8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z"] "OOOOXOOO" 8 2 ["D 2","C","U 3","C","D 4","C","U 2","Z","Z","U 1","C"] "OOXOXOOO"
programmers.co.kr
2021 카카오 인턴십 level3 문제.
효율성 테스트가 있는 문제이기 때문에 시간을 줄여야 한다.
다른 사람들과 카카오 테크 블로그를 확인하면 linkedList로 풀었다는데, 나는 k(선택된 행 번호)만 이용해서 이리저리 굴려서 완성했다.
마지막 StringBuilder 쓴 것과 table size 를 이용한 것만 다른 풀이를 참고했더니 효율성 테스트까지 통과할 수 있었다!..
다음에 링크드리스트로 풀게되면 풀이를 추가할 예정이다.
import java.util.Stack;
import java.util.StringTokenizer;
public class 표_편집 {
Stack<Integer> stack = new Stack<>();
int size;
public String solution(int n, int k, String[] cmd) {
//열의 사이즈(테이블 사이즈)
size = n;
for(String c : cmd) {
char cur = c.charAt(0);
if(cur == 'U' || cur == 'D') k = move(k, c);
else if(cur == 'C') k = cancel(k);
else k = rollBack(k);
}
return compare();
}
//이동하는 함수
private int move(int k, String c) {
StringTokenizer st = new StringTokenizer(c);
String cmd = st.nextToken();
int num = Integer.parseInt(st.nextToken());
if (cmd.equals("U")) return k - num;
else return k + num;
}
//삭제하는 함수
private int cancel(int k) {
stack.push(k);
size --;
if(size == k) k -= 1;
return k;
}
//삭제한 걸 되돌리는 함수
private int rollBack(int k) {
int last = stack.pop();
if(last <= k) k += 1;
return k;
}
//비교하는 함수
private String compare() {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < size; i ++) {
sb.append("O");
}
while(!stack.isEmpty()) {
sb.insert(stack.pop(), "X");
}
return sb.toString();
}
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 전화번호 목록 자바 풀이 (0) | 2022.06.05 |
|---|---|
| 프로그래머스 프린터 자바 풀이 (0) | 2022.06.05 |
| 프로그래머스 크레인 인형뽑기 자바 풀이 (0) | 2022.04.14 |
| 프로그래머스 키패드 누르기 자바 풀이 (0) | 2022.04.14 |
| 프로그래머스 숫자 문자열과 영단어 자바 풀이 (0) | 2022.04.14 |