• 백준 : 회전하는 큐
    코딩테스트 문제 풀이/백준 2023. 11. 20. 00:01

    문제

    내 코드

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    public class Main {
    public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readLine());
    int N = st.hasMoreTokens() ? Integer.parseInt(st.nextToken()) : 0;
    int M = st.hasMoreTokens() ? Integer.parseInt(st.nextToken()) : 0;
    st = new StringTokenizer(br.readLine());
    // cnt : 총 이동 횟수 저장할 변수
    int cnt = 0;
    // want : 찾아야 할 숫자를 저장할 변수
    int want;
    // Queue 역할을 할 list
    ArrayList<Integer> list = new ArrayList();
    // list는 Q의 길이만큼 초기화
    while (list.size() < N) {
    // cnt 잠시 빌려 사용
    list.add(++cnt);
    }
    // cnt 초기화
    cnt = 0;
    // 다음 원하는 숫자를 찾을 때 까지 반복
    while (st.hasMoreTokens()) {
    // want = 찾고 싶은 문자 저장
    want = Integer.parseInt(st.nextToken());
    // wnat가 list의 첫번째 값과 같다면
    // 조건 1에 해당하기 때문에 그냥 삭제
    if (want == list.get(0)) {
    list.remove(0);
    // 아래 실행문들 실행하지 않고 while 조건문으로 돌아감
    continue;
    }
    // 찾으려는 숫자의 인덱스 위치가
    // (리스트 크기-찾으려는 숫자의 인덱스 번호)보다 크면
    // 큐의 뒷부분에 위치하고 있는것이기 때문에 if문 타고 뒤에서 부터 탐색
    if (list.size() - list.indexOf(want) < list.indexOf(want)) {
    // 뒤의 값 앞으로 이동
    // 처음 이동시 뒤로 거꾸로 이동하기 때문에 counting 되어야함
    cnt++;
    // 원하는 값을 찾을 때 까지 while문 반복
    while(list.get(list.size() - 1) != want) {
    // 뒤의 값을 앞으로 이동시키기 위한 add( )
    list.add(0, list.get(list.size() - 1));
    // 맨 마지막 값을 맨 앞으로 옮겼으니 삭제해줌
    list.remove(list.size() - 1);
    // 이동이 일어났으므로 cnt+=1
    cnt++;
    }
    // want값을 지워야 하기때문에 삭제
    list.remove(list.size() - 1);
    } else {
    // 앞의 값 뒤로 이동
    while(list.get(0) != want) {
    // 맨 처음에 있는 값을 맨 뒤로 이동
    list.add(list.size(), list.get(0));
    // 맨 앞에 있는 값은 옮겨진걸로 되어야해서 지움
    list.remove(0);
    // 이동이 일어났으므로 cnt+=1
    cnt++;
    }
    // want값을 지워야 하기 때문에 삭제
    list.remove(0);
    }
    }
    System.out.println(cnt);
    }
    }

    '코딩테스트 문제 풀이 > 백준' 카테고리의 다른 글

    행성 X3  (0) 2023.11.21
    백준 : 힙 정렬2  (0) 2023.11.21
    백준: 요세푸스 문제  (0) 2023.11.20
    백준: 최소, 최대  (0) 2023.11.20
    백준 25556번 : 포스택  (0) 2023.11.20

Designed by Tistory / Custom by 얼거스