ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1/25기록 - 백준 2161
    Algorithm 2022. 1. 25. 09:24
    728x90

    오늘의 포스팅은 백준 2161번 카드1 문제이다.

     

     

    이 문제를 솔직히 보자마자 내 첫 포스팅이던 요세푸스 문제가 떠올랐다. 선입선출의 개념으로 Queue를 이용해서 풀면 깔끔할 것 같았다. 제일 처음에는 Queue와 ArrayList를 활용해서 Queue에서 poll() 메소드로 뽑은 수를 ArrayList에 담아서 list를 출력시키려고 생각했는데, 예제 출력 상 중간에 띄워져 있는 부분이 있어서 list만 출력시키면 안될 듯 하여 그냥 Queue만으로 문제를 풀고, StringBuilder에 append하여 출력시키는 방식을 생각했다.

     

    알고리즘 생각

    1. Queue를 활용한다.

    2. N을 입력받고 for문으로 N만큼 선언된 Queue에 add() 시켜 준다.

    3. isEmpty() 메소드를 사용하여 while문 안에서 처음 뽑은 수를 출력시켜준다.

    4. 뽑은 수를 제외하고 남은 수들 중 맨 앞 수를 뽑아서 Queue의 뒤에 add() 시켜준다.

    5. isEmpty()인 경우 break 시켜준다.

    6. StringBuilder를 활용해서 문구를 출력시킨다.

     

     

    이렇게 풀 수 있었다. 이 문제에서 처음엔 isEmpty()인 경우 break 시켜주는 문구를 만들어 주지 않았다. 처음 생각은 당연히 Queue에 내용이 없어지면 while문이 멈추겠지... 였었기 때문이다. 그런데 OutOfMemory에러가 발생했다. 그래서 멈추는 문구를 추가해 주니 정상적으로 출력이 이루어졌다. 나중에 heap개념을 자료구조를 통해 배우면 왜 이런 에러가 일어나는지 정확하게 알 수 있을 것 같다. ㅠㅠ

     

     

     

    아래쪽은 StringBuilder를 쓰지 않고 print로만 출력시킨것, 위는 StringBuilder를 사용한 것이다. 메모리 차이가 제법난다.

     

    1/25 기록 끝!!!!!!!!

    728x90

    'Algorithm' 카테고리의 다른 글

    1/27기록 - 프로그래머스 2019 KaKao 코딩테스트(실패율)  (2) 2022.01.27
    1/26기록 - 백준 1010  (0) 2022.01.26
    1/24기록 - 백준 1357  (0) 2022.01.24
    1/23기록 - 백준 1259  (0) 2022.01.23
    1/22기록 - 백준 4344  (0) 2022.01.22
Designed by Tistory.