https://www.acmicpc.net/problem/7569 대표적인 그래프 탐색 문제!! 마지막 토마토가 익는 날까지 최소 며칠이 걸리는지 풀어보는 문제다.ㅋㅋ 큐에 익은 토마토 좌표를 넣고, 그 토마토의 상하, 좌우, 위아래까지 확인한 다음 그 토마토가 익은 날짜에 +1을 해서 저장해준다. 그리고 익은 토마토 큐에 넣어주고 또 반복! let temp = readLine()!.split(separator: " ").map({ Int($0)! }) let m = temp[0] let n = temp[1] let h = temp[2] var tomato: [[[Int]]] = Array(repeating: [], count: h) var visited = Array(repeating: Array(re..
다이나믹 프로그래밍이란? 다이나믹 프로그래밍, 동적 계획법이라고 불리는 알고리즘은 하나의 커다란 문제를 작은 문제들로 나누어 값을 구하는 방법이다. 점화식을 구하고 나면 쉽게 풀 수 있지만 이런 사고방식에는 연습이 필요하다. 이 문제에서는 1, 2, 3만을 이용해 숫자를 나타낼 때, 그 경우의 수를 구해야 한다. 작은 것부터 차례대로 생각해보자. n = 1 1 1개 n = 2 1+1 2 2개 n = 3 1+1+1 1+2 2+1 3 4개 n = 4 1+1+1+1 1+1+2 1+2+1 1+3 2+1+1 2+2 3+1 7개 n=1일 때는 1, n=2일 때는 2, n=3일 때는 4 그리고 n=4일 때는 7개의 경우의 수가 나온다. 이 때 n=4를 자세히 살펴보자. 1+3이라는 큰 틀을 구할 때, 오른쪽 피연산자..
주변에 좋아하는 학생이 많도록 자리를 배치하는 문제 문제 자체는 이해가 쉬웠다! 그대로 구현하는 게 시간이 걸릴 뿐...🤯 사실 며칠 전에 풀다가 만 코드가 있었는데, 다시 보니까 무슨 소린지 전혀 모르겠어서 처음부터 다시 짰다 ㅋㅋ 정확하게 뭘 짜야 하는지 주석부터 달고 시작했더니 가닥이 쉽게 잡히는 것 같다 let n = Int(readLine()!)! var seats = Array(repeating: Array(repeating: 0, count: n), count: n) // 전체 좌석 만들기 우선 전체 좌석을 만들고 초기화해주었다 그리고 n * n 만큼 for문을 돌면서 한 줄씩 읽었다 한 명의 번호와 그 학생이 좋아하는 학생 번호들이 나열되기 때문에 한 줄을 읽을 때마다 실행해야할 것들이 많..
문제 5397번: 키로거 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입 www.acmicpc.net 1차 시도) 왼쪽에 값이 없고 이 들어왔을 때의 처리를 잘못해줘서 런타임 에러 발생. elif j not in {'', '-'}: left.append(j) 이걸 추가해서 처리해주었다. 2차 시도) 계속 런타임 에러만 뜨다가 시간 초과가 떴는데, 리스트에서 자꾸 뭘 움직이고 넣고 하는 것 때문이었다. 스택으로 바꿔주면서 해결! 최종) 왼쪽, 오른쪽 스택을 만들어서 커서가 있다고 가정하고 시작 문자가 들어오면..
문제 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 괜히 조합 combination 이런거 쓰려고 했다가 오히려 망한 케이스.. 그냥 쉽게 생각해서, 9명 중 2명을 제외했을 때 합이 100이면 그걸 출력하면 된다! nlist = [] for _ in range(9): nlist.append(int(input())) num1 = 0 num2 = 0 for i in range(8): for j in range(i+1, 9): if sum(nlist) - (nlist[i] + nlist[j]) == 100: num1 =..
문제 풀이 첫 번째 시도 for _ in range(M): t = list(map(str, sys.stdin.readline())) if t[0] == 'L' and cursor != 0: cursor -= 1 elif t[0] == 'D' and cursor != len(N): cursor += 1 elif t[0] == 'B' and cursor != 0: del N[cursor - 1] cursor -= 1 elif t[0] == 'P': N.insert(cursor, t[2]) cursor += 1 시간 초과가 나왔다. insert와 del을 썼는데, 시간복잡도가 O(n)이어서 그런 것 같았다. 두 번째 시도 시간복잡도 O(1)인 append, pop을 써서 다시 시도! 커서를 옮길 때 curso..