[백준/Python] 1406번 에디터
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/1406문제 풀이(시간초과)# 시간초과word = input()word = list(word)cursor = len(word)n = int(input())for i in range(n):    cmd = input().split()    if cmd[0] == 'L':        if cursor > 0:            cursor -= 1    elif cmd[0] == 'D':        if cursor != len(word):            cursor += 1    elif cmd[0] == 'B':        if cursor != 0:            word.remove(word[cursor-1])       ..
[백준/Python] 9461번 파도반 수열
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/9461문제 이해(점화식 찾기)먼저 이 문제는 규칙을 찾아야 한다.n ans1 12 13 14 25 26 37 48 59 710 911 1212 16​ n이 1부터 10까지의 답은 문제에 주어져 있어서 규칙을 쓰고 살펴보기 시작했다.n이 10일 경우 답이 9인데 9=4+5라는 것이 딱 보인 후 다른 값들을 살펴보니 정규식을 찾을 수 있었다. dp[n] = dp[n-2] + dp[n-3]문제 풀이(정답)T = int(input())for _ in range(T):    n = int(input())    dp = [1] * (n+1)    for i in range(4, n+1):        dp[i] = dp[i-2] + dp[i-3]    ..
[백준/Python] 1847번 스택 수열
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/1874문제 이해숫자 1부터 n까지의 수를 차례대로 push하는데 push와 pop을 이용해서 원하는 배열을 만드는 문제이다.이해하기 쉽게 chatGPT의 도움을 받았다. 📌 예시 ] 단계별로 스택의 변화를 보자- 수열 [4, 3, 6, 8, 7, 5, 2, 1] 만들기연산스택 상태출력 수열(pop)push 1[1] push 2[1, 2] push 3[1, 2, 3] push 4[1, 2, 3, 4] pop[1, 2, 3]4pop[1, 2]3push 5[1, 2, 5] push 6[1, 2, 5, 6] pop[1, 2, 5]6push 7[1, 2, 5, 7] push 8[1, 2, 5, 7, 8] pop[1, 2, 5, 7]8pop[1, 2,..
[백준/Python] 1012번 유기농 배추
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/1012문제 풀이(정답)from collections import dequeT = int(input())dx = [0, 0, -1, 1]dy = [1, -1, 0, 0]def bfs(x, y):    queue = deque([(x,y)])    matrix[x][y] = 0    while queue:        x, y = queue.popleft()      # 방문 좌표 제거        for i in range(4):            nx = x + dx[i]            ny = y + dy[i]            if nx 0 or nx >= m or ny 0 or ny >= n:                cont..
[백준/Python] 9095번 1, 2, 3 더하기
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/9095문제 이해규칙을 찾기 위해 정수 n을 1,2,3으로 나타내는 방법의 수를 구해보았다.처음에는 숫자 하나만 사용해도 되는지 몰라서 규칙을 찾는데 오래걸렸다.n ans 1 1 2 2 3 4 4 7 5 13 6 24 7 44 규칙은 앞 세개의답을 더하는 것이었다.점화식을 파악했으니 이제 문제를 풀 수 있다.문제 풀이(정답)T = int(input())for _ in range(T):    n = int(input())    dp = [0] * 11    dp[1] = 1    dp[2] = 2    dp[3] = 4    for i in range(4, n+1):        dp[i] = dp[i-1] + dp[i-2] + dp[i-3]..
[백준/Python] 2108번 통계학
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/2108문제 풀이산술평균부터 범위까지 차례대로 풀어보았다. 1 ] 산술평균n = int(input())su = [int(input()) for _ in range(n)]su.sort()# 1. 산술평균mean = sum(su) / len(su)mean = round(mean, 0)print(int(mean)) 수의 합계와 길이를 구한 후 나누어 준다. 그 후 반올림 문제도 해결해 주었다.int()를 묶어주지 않으면 예제 4의 조건을 만족시키지 못해서 신경써주어야 한다.# 예제 4(0 + 0 + (-1)) / 3 = -0.333333... 이고 이를 첫째 자리에서 반올림하면 0이다. -0으로 출력하면 안된다.  2 ] 중앙값# 2. 중앙값idx ..
[백준/Python] 11729번 2×n 타일링
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/11726문제 이해1x2 블럭을 채워넣는 경우의 수를 세는 문제이다.n이 1인 경우부터 차례대로 세어나가고 있었다. n이 5인 경우를 구하고 있을 때 나는 눈치를 챘다.이 문제는 피보나치 문제이구나!!n ans1 12 23 34 55 86 137 218 349 55문제 풀이(시간초과 : 피보나치 함수)# 시간초과 : 재귀n = int(input())def fibo(x):    if x == 1 or x == 2:        return x    else:        return fibo(x-1) + fibo(x-2)print(fibo(n)) 나는 피보나치 문제니까 피보나치 함수를 만들어서 풀면 되겠지? 라고 생각하고 풀었지만 시간초과가 되었..
[백준/Python] 28278번 스택 2
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/28278문제 이해문제 이름과 같이 스택에 관한 문제이다.명령어(1~5)에 따라 명령을 수행하면 되는 차례대로 풀면 되는 문제이다.문제 풀이(정답)import sysinput=sys.stdin.readlin n = int(input())stack = []for _ in range(n):    cmd = input().split()    if cmd[0] == '1':        stack.append(cmd[1])    elif cmd[0] == '2':        if len(stack) == 0:            print(-1)        else:            print(stack.pop())    elif cmd[0] ..
[백준/Python] 11652번 카드
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/11652문제 이해카드의 개수를 세고 가장 많은 카드의 개수의 정수를 출력하는 문제이다."가장 많은 카드의 개수의  정수가 여러가지이면, 숫자가 작은 것을 출력한다"라는 것이 조건에 있다.문제 풀이(시간 초과)# 시간 초과n = int(input())li = []ans = []for _ in range(n):    card = int(input())    li.append(card)li.sort()card_set = list(set(li))card_set.sort()cnt = []for c in card_set:    cnt.append(li.count(c)) # 시간초과 원인for i,v in enumerate(cnt):    if max(c..
[백준/Python] 7785번 회사에 있는 사람
·
알고리즘문제풀이
문제https://www.acmicpc.net/problem/7785문제 이해이 문제는 입력값에 enter가 들어가면 리스트에 삽입하고 입력값에 leave가 들어가면 리스트에서 제거하는 문제이다.입력값을 띄어쓰기를 기준으로 나눠준 후, 기준에 따라 리스트에 삽입과 제거를 한다. 그리고 사전 역순으로 정렬해 주면 된다.문제 풀이(시간 초과)# 시간 초과n = int(input())li = []for _ in range(n):    people = input()    ps = people.split()    if ps[-1] == 'enter':        li.append(ps[0])    elif ps[-1] == 'leave':        li.remove(ps[0])# 정렬li = sorted(l..