# 오큰수 = i보다 오른쪽에 있으면서 가장 큰수들 중 i와 제일 가까운(왼쪽)이 있는 수 # 오큰수가 없다면 -1 # 수열 개수만큼 반복 # stack에는 0번째 수가 들어있다. 0번째 수와 1번째 수 비교 # 0번과 1번 비교시 1이 크다면 result에 현재 인덱스에 큰 값 추가 # 크지 않다면 pop. n = int(input()) num_ls = list(map(int, input().split())) result = [-1 for _ in range(n)] stack = [] # 각 인덱스를 저장 for i in range(n): # n만큼 반복 while stack and num_ls[i] > num_ls[stack[-1]]: # 현재 요소와 이전 요소들을 비교. 현재 요소가 이전 요소보다 ..
study/Algorithm
# stack # 탑 개수만큼 반복 # 레이저가 발사되는 탑의 이전 탑이 더 높거나 같아야 수신 가능. # 현재 탑과 이전 요소들을 비교해서 현재 탑보다 낮다면 건너뛰기. # 높거나 같다면 해당 요소 인덱스를 결과에 추가. n = int(input()) towers = list(enumerate(map(int, input().split()))) # 인덱스 + 탑높이 result = [0 for _ in range(n)] # 결과 배열 stack = [] # 왼쪽 탑과 비교해줄 stack for idx, height in towers: while stack: # stack에 값이 있을때. 맨 왼쪽은 수신이 안되니까 그냥 넘어감. top_idx, top_height = stack[-1] # 현재 탑에서 왼쪽..
""" - 자료구조 덱 사용 * 문제 정리 - 출력값 : 터진 풍선의 번호 나열 - 1번 풍선 터짐 -> 해당 값만큼 이동 -> 풍선 터지고 이동... - 값이 양수면 오른쪽으로 음수이면 왼쪽으로 이동. 이미 터진 풍선은 제외. * 개념 정리 - enumerate : 순서가 있는 자료형을 받았을때 인덱스와 값을 포함해 리턴 - deque.rotate() : 원형 큐를 회전. 음수는 반시계로 회전, 양수는 시계방향으로 회전. """ from collections import deque n = int(input()) balloons = deque(enumerate(map(int, input().split()))) order = [] while balloons: idx, paper = balloons.popl..
""" - 자료구조 큐 사용 * 문제 정리 - 출력값 : 각 문서의 중요도와 순서에 따라 인쇄가 될때, N개중 M번째의 문서는 몇번째로 출력되는가? - 인쇄 조건 - 현재 큐의 가장 앞에 있는(0번째) 문서의 중요도 확인 - 다른 문서들 중 중요도가 더 높은것이 있는지?(= 현재 문서의 중요도가 가장 높은지?) - 더 높은 것이 없다면 출력 - 그렇지 않다면 맨 뒤로 재배치 - 0번째 문서의 중요도 확인 반복 * 수도 코드 - 중요도들을 큐에 추가 - 찾을 문서의 현재 위치를 기억 - 인쇄 조건 확인 => 0번째 문서가 중요도의 최대값과 같은지? - 같다면 출력 + 1. 찾을 위치값 -1. - 다르다면 0번째 문서를 제거 후 맨 뒤에 다시 추가. 찾을 문서의 위치값 조정. - 찾을 문서의 위치값이 0이 ..
""" - 스택 자료구조 사용 - 입력된 문자열이 짝이 맞는 괄호"()"로 이루어져있는지 확인하여 YES 또는 NO를 반환하는 문제. * 수도 코드 - 입력된 문자열 길이만큼 반복문 돌기 - ( 가 들어오면 stack에 추가 - ) 가 들어오면 stack에 들어있던 ) 를 삭제 (= 짝이 맞다) - 반복문이 끝났을 경우 ( 가 - stack에 남아있다면 짝이 맞지 않다. => NO를 반환 - stack이 남아있지 않다면 짝이 맞다. => YES를 반환 메모리 31120KB | 시간 44ms | 길이 367B """ t = int(input()) str_ls = [input() for _ in range(t)] def check_vps(str): stack = [] # stack 생성 for char in..
address = input().split(':') # 콜론 기준으로 주소를 분리 if address[0] == '': # 맨 첫자리가 공백일 경우 = 콜론일 경우 제거. 중복되지 않기 위함 address = address[1:] if address[-1] == '': # 끝자리가 공백일 경우 제거. 0이 중복일 경우 ::로 표현되니까 체크해줌 address = address[:-1] result = '' for i in address: # 입력된 주소만큼 반복 if i == '': # 빈 문자열이라면 = : = 0000이 생략됨 result += '0000:' * (8-len(address)+1) # 전체 자리 8 - 받아온 주소 길이 + 1(현재) = 생략된 부분만큼 0000 추가 else: resu..
# 실패코드 board = [list(map(int, input().split())) for _ in range(19)] for i in range(19): for j in range(19): if board[i][j] == 1: # black temp = [0, 0, 0] for k in range(1, 7): if board[i][j + k] == 1: temp[0] += 1 if board[i+k][j] == 1: temp[1] += 1 if board[i+k][j+k] == 1: temp[2] += 1 if 4 in temp: print(1) print(i+1, j+1) exit() if board[i][j] == 2: temp = [0, 0, 0] for k in range(1, 7): if b..
switch_num = int(input()) # 스위치 개수 switch_state = list(map(int, input().split())) # 스위치 상태 student = int(input()) # 학생 수 student_info = [list(map(int, input().split())) for _ in range(student)] # 학생 성별과 받은 숫자 for i in range(student): # 학생 수만큼 반복 num = student_info[i][1] # 현재 학생이 받은 숫자 if student_info[i][0] == 1: # 남학생이라면 for j in range(switch_num): # 스위치 개수만큼 반복 if (j+1) % num == 0: # 스위치 번호가 nu..
# 제일 바깥쪽 1줄을 큰 사각형이라고 하고 회전, 그 안쪽 사각형 회전... n, m, r = map(int, input().split(' ')) graph = [list(map(int, input().split(' '))) for _ in range(n)] for _ in range(r): # 회전 수만큼 반복 for i in range(min(n, m) // 2): # 사각형 개수 s_x, s_y = i, i # 맨 처음 좌표 지점 s_value = graph[s_x][s_y] # 맨 처음 좌표가 가진 값 for j in range(i + 1, n - i): # 좌 s_x = j prev_value = graph[s_x][s_y] # 현재 좌표값 graph[s_x][s_y] = s_value # 현..
n = int(input()) room = [list(input()) for _ in range(n)] w, h = 0, 0 # 가로/세로로 누울 수 있는 자리 for i in range(n): temp_w = '' # 빈칸이 연속해있는지 확인하기 위한 임시 변수 temp_h = '' for j in range(n): # 가로 if room[i][j] == '.': # 빈칸일경우 임시변수에 추가 temp_w += '.' else: # 빈칸이 아닐경우(X) if len(temp_w) >= 2: # 2칸 이상인지 체크 w += 1 temp_w = '' # 임시 변수 비우기 # 세로 if room[j][i] == '.': temp_h += '.' else: if len(temp_h) >= 2: h += 1 t..