분류 전체보기

# 문자열 길이만큼 반복 # stack 사용 # 맨끝에서 폭발문자열의 길이만큼 체크했을때 폭발문자열이 있다면 그만큼 삭제 # 반복믄 끝나면 모든 문자열을 붙여서 리턴 # stack 길이가 0이면 FRULA 출력 str = input() explode = list(input()) stack = [] for s in str: # 문자열 길이만큼 반복 stack.append(s) # stack에 글자 추가 # stack의 길이가 폭발문자열 길이 이상이고 stack의 끝부분에 폭발문자열이 있다면 if len(stack) >= len(explode) and stack[-len(explode):] == explode: del stack[-len(explode):] # stack에 있는 폭발문자열 제거 if not ..
# 오큰수 = 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]]: # 현재 요소와 이전 요소들을 비교. 현재 요소가 이전 요소보다 ..
# 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..
· study/TIL
1. 스택 (Stack) 후입선출(LIFO : Last In First Out). 파이썬의 list를 사용해서 구현할 수 있다. 기본 연산 push : 스택에 원소 추가 pop : 스택에 가장 마지막으로 들어온 원소를 제거하고 그 값을 반환 peek : 스택에 가장 마지막으로 들어온 원소를 조회 list로 스택 구현하기 stack = [] stack.append(3) # 3 push stack.append(2) # 2 push stack.append(5) # 5 push stack.pop() # pop -> 5 가 제거됩니다 print(stack[-1]) # peek / python의 음수 인덱스를 활용. 맨 마지막 요소가 출력됨 2. 큐 (Queue) 선입선출(FIFO : First In First O..
· study/TIL
오늘 강의는 없었고, 코딩 테스트를 했다. 문제가 어려운 것들이 너무 많았다 😢 그래도 멘토링 시간에 다 어려워하는 부분이니 걱정하지 말라는 얘기도 들었고 좋은 문제들에 대해 정리해볼 수 있었다. 사실 오늘 코딩 테스트 문제들을 풀면서 좀 힘들었다... 계속 실패하는 문제들 때문에 힘들었고 멘탈적으로도 좀 힘들었다. 그래도 조금 쉬고 나서 다시 생각해보면 내가 파이썬으로 알고리즘을 공부한지는 겨우 일주일쯤인데 잘하기를 바라는건 욕심인 것 같다는 생각이 들었다. 또 힘들긴 했지만 처음 문제들을 풀때 파이썬 함수들을 몰라서 계속 구글링 했던걸 생각하면 지금은 그래도 어느정도는 외우고 익숙해진 함수들이 있으니까 아주 늘지 않았다고는 말할수 없기도 하고. 내가 원하는 만큼은 아니지만 분명히 실력이 늘긴 늘었다는..
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..
해리Harry
'분류 전체보기' 카테고리의 글 목록 (8 Page)