Baekjoon/IM Level

Baekjoon/IM Level

[백준] 1931 회의실 배정 (실버1) / lambda(람다) : 익명함수

문제요약 나의 코드 및 설명 (시간초과) n번의 회의가 주어진다면, 첫 번째로 가지는 회의의 모든 경우를 다 따진 후 최댓값을 구하는 코드를 작성하였다. 모든 경우를 다 따지는 거라 시간초과가 뜰 것이라 생각했는데 역시나 시간초과가 떴다. import sys n = int(input()) all = [] for _ in range(n): all.append(list(map(int, sys.stdin.readline().split()))) for i in range(len(all)): ans = 1 cnt = 1 meeting = [] meeting.append(all[i]) for j in range(len(all)): if j == i: continue else: tmp_cnt = 0 for k in ..

Baekjoon/IM Level

[백준] 9012 괄호 (실버4) / 스택

문제요약 나의 코드 및 설명 - for문 사용 요소 한 개를 저장한 리스트 ans를 생성하고, for문을 통해 입력한 문자열의 뒤에서부터 거꾸로 확인하여, 닫힌 괄호의 개수보다 열린 괄호 의 개수가 많아지면 ans에 저장된 요소의 개수는 0개가 되고, 그렇다면 NO를 출력하는 코드를 작성하였다. import sys n = int(input()) for _ in range(n): string = list(sys.stdin.readline().rstrip()) ans = [0] #만약 입력한 문자열에서 '('의 개수와 ')'의 개수가 다르다면 VPS가 아니다. if string.count("(") != string.count(")"): print("NO") #'('의 개수와 ')'의 개수가 같다면, else..

Baekjoon/IM Level

[백준] 1966 프린터 큐 (실버3) / 큐

문제요약 나의 코드 및 설명 우선순위가 높은 프린트물을 출력(popleft())하더라도 구하려고 하는 인덱스를 계속 추적함으로써 구하려고 하는 인덱스가 0에 위치해 있다면 반복문을 종료하는 코드를 작성하였다. ans_idx : 먼저, 현재 입력받은 값에서, 구하려고 하는 인덱스 정보를 저장한다. while문에서, 현재 큐 안에 우선순위가 가장 큰 인덱스를 찾아서 해당 요소를 큐의 맨 앞에 위치하도록 for문을 수행한다. for문을 수행했다면, 원래 찾으려고 했던 인덱스도 변화되었을 것이고, 어디에 있는지 찾아준다. 만약 찾으려고 했던 인덱스가 맨 앞에 위치해 있다면 현재까지 프린트물을 몇 번 출력했는지 정보를 저장한 time을 출력하고 반복문을 탈출한다. 만약 찾으려고 했던 인덱스가 뒤에 위치해 있다면,..

Baekjoon/IM Level

[백준] 11866 파이썬 (실버5) / 큐, replace() : 문자열을 변경하는 함수

문제요약 나의 코드 및 설명 제거할 숫자를 큐의 가장 왼쪽에 위치시키고, popleft() 함수를 통해 ans에 저장하는 코드를 작성하여 문제를 해결하였다. from collections import deque n, k = map(int, input().split()) queue = deque(range(1,n+1)) ans = [] while queue: for i in range(k-1): queue.append(queue.popleft()) ans.append(queue.popleft()) print(str(ans).replace("[","")) replace("바꿀 문자열","바뀔 문자열") : 문자열을 변경하는 메서드 string = "Hello world" l = string.replace("..

Baekjoon/IM Level

[백준] 10431 줄세우기 (실버5)

문제요약 나의 코드 및 설명 (뒤에서부터 값 비교) 입력한 숫자들을 저장한 리스트의 제일 마지막 인덱스(i)와 그 앞의 인덱스부터 첫 번째 인덱스(j)까지 값을 비교하여, 마지막 인덱스(i)의 값이 더 작다면, 앞의 인덱스와 값을 바꿔준다. 모두 반복하게 된다면 첫 번째 반복에서, 제일 마지막 인덱스에 숫자 중 가장 큰 값이 위치하게 될 것이다. 20개의 숫자이니까, 20번을 반복하게되면 오름차순으로 숫자를 정렬할 수 있게 된다. n = int(input()) for _ in range(n): num_list = list(map(int, input().split())) test_case = num_list[0] cnt = 0 #맨 뒤의 인덱스의 값과 for i in range(len(num_list)-1..

Baekjoon/IM Level

[백준] 1158 요세푸스 문제 (실버4) / 큐

문제요약 나의 코드 및 설명 - 리스트를 이용한 풀이 1부터 n까지의 수를 저장한 리스트를 생성하고, 정답으로 출력할 요세푸스 순열을 저장할 리스트를 로 초기화한다. 의 요소가 다 제거될 때 까지 반복하는 while문을 생성한다. num_plan_idx : 제거되어야 할 인덱스 if len(num_li) == 0 : 만약 num_list에 저장된 요소가 하나도 없으면 반복문을 탈출한다. (다음 작성한 코드에서 len(num_li)로 나누어야 하는 경우가 나오는데, 0으로 나눠지는 것을 방지한다.) num_li의 인덱스 num_plan_idx의 값을 pop() 함수를 통해 제거하고, ans에 저장한다. 그 다음, 다음에 수행될 반복에 대해 num_plan_idx 를 갱신해주어야 하는데, num_li 의 요..

Baekjoon/IM Level

[백준] 2491 수열 (실버4) / DP(다이나믹 프로그래밍)

문제요약 나의 코드 및 설명 입력받은 수를 리스트에 저장하고, for문을 통해 인덱스 1의 수부터 하나하나 살펴본다. 만약 이전의 수보다 크거나 같다면 big_cnt에 1을 추가한다. 이 때, big_cnt 값이 ans보다 크다면, ans를 big_cnt로 갱신한다. 만약, 이전의 수보다 크거나 같지 않다면 big_cnt를 1로 초기화한다. 이번엔 이전의 수보다 작거나 같은지 확인하기 위해 새로운 if문을 수행한다. 동작 방식은 크거나 같은지 확인하는 if문과 동일하다. 이 때, small_cnt의 값을 갱신하기 위해 ans 변수에 접근하게 되는데, 이를 통해 연속되는 크거나 같은 수의 개수, 연속되는 작거나 같은 수의 개수의 최댓값이 ans에 저장되게 되고, ans만 출력하게 되면 문제를 해결할 수 있..

Baekjoon/IM Level

[백준] 10157 자리 배정 (실버4)

문제요약 나의 코드 및 설명 01 (노가다.. 성공) c, r = map(int, input().split()) k = int(input()) if k > c*r: print(0) r_list = list(range(r,0,-1)) c_list = list(range(c-1,0,-1)) i = 0 seat = 0 plus_time = 0 while True: if i > len(r_list)-1 or i > len(c_list)-1: break if seat >= k: break else: seat = seat + r_list[i] plus_time += 1 if seat >= k: break else: seat = seat + c_list[i] plus_time += 1 i+=1 if k > seat:..

hellosonic
'Baekjoon/IM Level' 카테고리의 글 목록