여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다.
현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다. 예를 들어 Queue에 4개의 문서(A B C D)가 있고, 중요도가 2 1 4 3 라면 C를 인쇄하고, 다음으로 D를 인쇄하고 A, B를 인쇄하게 된다.
여러분이 할 일은, 현재 Queue에 있는 문서의 수와 중요도가 주어졌을 때, 어떤 한 문서가 몇 번째로 인쇄되는지 알아내는 것이다. 예를 들어 위의 예에서 C문서는 1번째로, A문서는 3번째로 인쇄되게 된다.
입력
첫 줄에 테스트케이스의 수가 주어진다. 각 테스트케이스는 두 줄로 이루어져 있다.
테스트케이스의 첫 번째 줄에는 문서의 개수 N(1 ≤ N ≤ 100)과, 몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue에서 몇 번째에 놓여 있는지를 나타내는 정수 M(0 ≤ M < N)이 주어진다. 이때 맨 왼쪽은 0번째라고 하자. 두 번째 줄에는 N개 문서의 중요도가 차례대로 주어진다. 중요도는 1 이상 9 이하의 정수이고, 중요도가 같은 문서가 여러 개 있을 수도 있다.
출력
각 테스트 케이스에 대해 문서가 몇 번째로 인쇄되는지 출력한다.
예제 입력 1
3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1
예제 출력 1
1
2
5
분석
아이디어
문제에서 요구하는대로 구현
해결 코드 주석 참조
복잡도
주어진 문서들의 길이 시간 복잡도
자료구조
큐
해결 코드
tc = int(input())
for _ in range(tc):
n,m = map(int,input().split())
docs = deque(list(map(int,input().split())))
out_num=0
while docs:
doc_top = max(docs) # 중요도가 제일 높은 문서
doc_1 = docs.popleft() # 가장 앞에 있는 문서
m-=1 # 찾으려는 문서가 출력될 때까지, 왼쪽으로 이동하면서 탐색
if doc_top == doc_1: # 가장 앞에 있는 문서가 중요도가 제일 높은 문서이면
out_num+=1
if m < 0: # 찾으려는 문서가 중요도가 제일 높은 문서라 출력
print(out_num)
break
else:# 2. 가장 앞에 있는 문서가 중요도가 제일 높은 문서가 아니라면
docs.append(doc_1) # Queue의 가장 뒤에 재배치
if m<0: # 찾으려는 문서가 중요도가 제일 높은 문서가 아니면서 가장 앞에 있어
m = len(docs) - 1 # 가장 뒤에 재배치
3) build.gradle 변경 반영 인텔리제이 오른쪽 하단 알럿의 Enable Auto-import 클릭하여build.gradle 변경이 있을 때 마다 자동 반영되도록 설정
4) 의존성 확인 오른쪽 Gradle 탭을 클릭하여 의존성들이 잘 받아졌는지 확인
1.5 인텔리제이에서 깃과 깃허브 사용하는 방법
VCS(버전 관리 시스템) 선택: Git
Git의 원격 저장소 서비스 선택: Github
인텔리제이에서 깃허브 연동
1) Ctrl + Shift + A : Action 검색창 열기 2) share project on github 검색 3) 깃허브 로그인 4) Repository name 설정 후 등록 ( 최초 git ingnore 설정 No) 5) 첫 커밋 팝업창에서 .idea 디렉토리 제외한 후 커밋 ( 실행시 자동으로 생성되는 파일들이므로 깃허브 올릴 필요 없음 ) 6) .gitignore파일을 사용하여 .idea 폴더를 앞으로의 모든 커밋 대상에서 제외 처리
인텔리제이에서는 .gitignore 파일에 대한 기본적인 지원이 없음
플러그인에서 .gitignore 지원
.ignore 플러그인 지원 기능
파일 위치 자동완성
이그노어 처리 여부 확인
다양한 이그노어 파일 지원(.gitignore, .npmignore, .dockerignore 등)
설치 방법
1) Ctrl + Shift + A : Action 검색창 열기 2) plugins 검색 3) Marketplace 에서 .ignore 설치 4) 인텔리제이를 다시 시작해서 설치한 플러그인 적용 ( 반드시 재시작해야만 함) 5) .gitignore 파일 생성: 프로젝트 이름을 선택한 뒤, 마우스 오른쪽 or Alt + Insert로 New(생성목록) 확인하여 .gitignore 파일 생성 6) 이그노어 처리 후 깃허브에 .gitignore 파일을 푸시하여 반영
2차원 배열 좌표 합의 나머지 규칙으로 인접한 사각형이 같은 색인 경우 칠하는 개수 카운팅
B, W 로 시작하는 경우 중 작은 값 n-7, m-7 범위 카운팅 리스트에 저장
출력: 카운팅 리스트에서 최소값을 출력
해결 코드
n,m=map(int,input().split())
board=list()
cnt=list()
for _ in range(n):
board.append(input())
for i in range(n-7):
for j in range(m-7):
blackCase=0
whiteCase=0
for a in range(i,i+8):
for b in range(j,j+8):
if (a+b)%2==0:
if board[a][b]!='B':
blackCase+=1
if board[a][b]!='W':
whiteCase+=1
else:
if board[a][b]!='W':
blackCase+=1
if board[a][b]!='B':
whiteCase+=1
cnt.append(min(blackCase,whiteCase))
print(min(cnt))