Baekjoon

Baekjoon/백트래킹

[백준] 15649 N과 M (1) (실버3) / 백트래킹

문제요약 나의 코드 및 설명 중복없이 M개를 고른 수열을 ans에 저장하기 위해 main 함수에서 visited 리스트를 생성하고, ans에 해당 수가 저장된다면 visited의 동일 인덱스에 1을 저장한다. ans = [] def dfs(index): #index자리 if len(ans) == m: print(" ".join(map(str, ans))) return if index == n: return for i in range(1, n+1): if visited[i] == 0: #ans에 현재의 값이 들어있는지 확인 visited[i] = 1 #지금 들어가니까 방문처리 ans.append(i) dfs(index+1) #다음 자리를 결정하는 함수 호출 visited[i] = 0 ans.pop() #갔..

Baekjoon

[백준] 1316 그룹 단어 체커 (실버5)

문제요약 나의 코드 및 설명 입력받은 단어의 첫 번째 글자부터 하나하나 살펴본다. 26개의 리스트를 요소로 갖는 2차원 인덱스를 생성하여, 각 알파벳 순서(인덱스)에 맞는 누적된 글자의 개수를 해당 위치에 추가시킨다. 그 후 누적된 글자 개수의 최댓값이 글자의 개수와 같은지 다른지를 확인한다. n = int(input()) #그룹 단어의 개수 : 총 단어의 개수로 초기화 total_cnt = n for _ in range(n): string = list(input()) #26개의 알파벳만큼 리스트를 생성 (a=idx0 / b=idx1 ...) #알파벳 리스트의 인덱스는 이다. alpha = [[] for _ in range(26)] #현재 누적된 글자 개수는 1 cnt = 1 #단어 글자를 하나하나 뜯어..

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 의 요..

hellosonic
'Baekjoon' 카테고리의 글 목록 (11 Page)