쵼쥬
쵼쥬의 개발공부 TIL
쵼쥬
전체 방문자
오늘
어제
  • 분류 전체보기 (276)
    • 코딩테스트 (192)
      • [알고리즘] 알고리즘 정리 (7)
      • [백준] 코딩테스트 연습 (126)
      • [프로그래머스] 코딩테스트 연습 (59)
    • Spring (71)
      • [인프런] 스프링 핵심 원리- 기본편 (9)
      • [인프런] 스프링 MVC 1 (6)
      • [인프런] 스프링 MVC 2 (4)
      • [인프런] 실전! 스프링 부트와 JPA 활용1 (7)
      • [인프런] 실전! 스프링 부트와 JPA 활용2 (5)
      • [인프런] 실전! 스프링 데이터 JPA (7)
      • [인프런] 실전! Querydsl (7)
      • JWT (5)
      • [인프런] Spring Cloud (17)
      • [인프런] Spring Batch (4)
    • Java (6)
      • [Java8] 모던인자바액션 (4)
      • [부스트코스] 웹 백엔드 (2)
      • [패스트캠퍼스] JAVA STREAM (0)
    • CS (6)
      • 디자인 패턴과 프로그래밍 패터다임 (2)
      • 네트워크 (4)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 타임리프
  • spring
  • 인프런
  • 누적합
  • jpa
  • 코딩테스트
  • Spring Data JPA
  • 비트마스킹
  • 구현
  • 자바
  • 백준
  • querydsl
  • 알고리즘
  • BFS
  • 프로그래머스
  • 부스트코스
  • 백분
  • MVC
  • 스프링
  • 위클리 챌린지

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쵼쥬
코딩테스트/[프로그래머스] 코딩테스트 연습

프린터

코딩테스트/[프로그래머스] 코딩테스트 연습

프린터

2021. 7. 22. 20:52

문제 설명

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다.

 

1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.

2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다.

 

예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다.

내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 알고 싶습니다. 위의 예에서 C는 1번째로, A는 3번째로 인쇄됩니다.

현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 priorities와 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 location이 매개변수로 주어질 때, 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 return 하도록 solution 함수를 작성해주세요.

 

제한사항

  • 현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다.
  • 인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다.
  • location은 0 이상 (현재 대기목록에 있는 작업 수 - 1) 이하의 값을 가지며 대기목록의 가장 앞에 있으면 0, 두 번째에 있으면 1로 표현합니다.

 

입출력 예

priorities location return
[2, 1, 3, 2] 2 1
[1, 1, 9, 1, 1, 1] 0 5

 

입출력 예 설명

예제 #1

문제에 나온 예와 같습니다.

 

예제 #2

6개의 문서(A, B, C, D, E, F)가 인쇄 대기목록에 있고 중요도가 1 1 9 1 1 1 이므로 C D E F A B 순으로 인쇄합니다.

 


 

풀이 방법 생각

순서를 계산할 때 뒤로 보내지 않고 다시 맨앞으로 가는 식의 코드를 생각했다. 그렇게하기 위해 목록에서 문서가 인쇄됐는지를 확인하고 확인이 끝나면 지금 이 문서를 인쇄하는게 맞는지 확인해서 맞다면 대기 목록에서 없애는 것을 생각했다.

 

내 코드

import java.util.Arrays;

public class Solution {
    public int solution(int[] priorities, int location) {
    
        int answer = 0;
        int[] array = new int[priorities.length];
        int[] arr = priorities.clone();
        
        Arrays.sort(arr);

        int index = 0;

        while (true) {
            if (array[index % priorities.length] == 0 && priorities[index % priorities.length] == arr[arr.length - (1 + answer % priorities.length)]) {
                answer++;
                array[index % priorities.length] = 1;
                if (location == index % priorities.length)
                    break;
            }
            index++;
        }
        return answer;
    }
}

 

다른 사람 풀이

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        int l = location;

        Queue<Integer> que = new LinkedList<Integer>();
        for(int i : priorities){
            que.add(i);
        }

        Arrays.sort(priorities);
        int size = priorities.length-1;



        while(!que.isEmpty()){
            Integer i = que.poll();
            if(i == priorities[size - answer]){
                answer++;
                l--;
                if(l <0)
                    break;
            }else{
                que.add(i);
                l--;
                if(l<0)
                    l=que.size()-1;
            }
        }

        return answer;
    }
}

 

이 풀이는 queue를 이용해 구현해서 대기목록 자체를 구현했다. 그래서 앞에서 뒤로 넘기는 작업까지 구현한 코드로 문제에서 제시한 방법 그대로 사용하고 깔끔하게 구현한 것으로 보인다.

 

스택, 큐 확인!!!

'코딩테스트 > [프로그래머스] 코딩테스트 연습' 카테고리의 다른 글

주식가격  (0) 2021.07.26
다리를 지나는 트럭  (0) 2021.07.24
기능개발  (0) 2021.07.21
타겟 넘버  (0) 2021.07.14
카펫  (0) 2021.07.13
    '코딩테스트/[프로그래머스] 코딩테스트 연습' 카테고리의 다른 글
    • 주식가격
    • 다리를 지나는 트럭
    • 기능개발
    • 타겟 넘버
    쵼쥬
    쵼쥬

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.