본문 바로가기

CodingTest

[Python][백준 9095번] 123더하기 # https://www.acmicpc.net/problem/9095 import sys import heapq import math from collections import deque sys.stdin = open("input.txt", "rt") sys.setrecursionlimit(1001*1001) n = int(input()) m = 3 nums = [1, 2, 3] dp = [0]*11 dp[0] = 1 for i in range(len(dp)): for j in range(m): if i - nums[j] >= 0: dp[i] += dp[i-nums[j]] print("dp", dp) 더보기
[C++][백준 17141번] 연구소 2 # https://www.acmicpc.net/problem/17141 # 최초 풀이 import sys import heapq import math from collections import deque sys.stdin = open("input.txt", "rt") sys.setrecursionlimit(1001*1001) ''' 이번에는 벽이 아니라 바이러스를 놓는 과정을 보여주고 있다 1) dfs 를 통해, 가능한 바이러스의 조합을 만든다 ( 즉, 어디에 바이러스를 놓을 지 선택한다 ) 2) 각각의 조합에 대해서 bfs를 돌린다 단, 기존 bfs 방식이 아니라, queue 방식으로 바이러스를 둔다 그래서 각 단계별로, 시간을 체크해야 한다 3) 모든 bfs가 끝나고 나서, 모든 곳에 0이 있는지 출.. 더보기
[Python][백준 17141번] 연구소 2 # https://www.acmicpc.net/problem/17141 # 최초 풀이 import sys import heapq import math from collections import deque sys.stdin = open("input.txt", "rt") sys.setrecursionlimit(1001*1001) ''' 이번에는 벽이 아니라 바이러스를 놓는 과정을 보여주고 있다 1) dfs 를 통해, 가능한 바이러스의 조합을 만든다 ( 즉, 어디에 바이러스를 놓을 지 선택한다 ) 2) 각각의 조합에 대해서 bfs를 돌린다 단, 기존 bfs 방식이 아니라, queue 방식으로 바이러스를 둔다 그래서 각 단계별로, 시간을 체크해야 한다 3) 모든 bfs가 끝나고 나서, 모든 곳에 0이 있는지 출.. 더보기
[Python][백준 2529번] 부등호 # https://www.acmicpc.net/problem/2529 ''' ------------------------------------------------------------------ '브루트 포스' : '순열' 문제 왜 ?? 이미 선택된 수는 '모두 달라야 한다' 라는 조건이 있기 때문이다. 순열이라는 것은, 중복되지 않은 수로, 순서를 섞어서 만들 수 있는 수열을 모두 구하면서 해결 할 수 있다. 이 문제 같은 경우는 k + 1 개의 수가 있고, 0 ~ 9 중에서 k + 1을 고르고 그 중에서, 순서를 고려해야 한다. ( 즉, 기본 순열문제와의 차이점은 보통 순열은 숫자가 주어지고, 섞어라 ! 라는 식의 문제인데, 여기서는, 숫자 자체를 우리가 뽑는 과정도 추가적으로 들어가 있다라는 것이.. 더보기
[C++][백준 14502번] 연구소 # https://www.acmicpc.net/problem/14502 ''' 해당 문제는 크게 2가지 부분으로 진행된다 1) 벽을 3개 세우는 부분 > 2) 그리고 벽을 세울 때마다, 바이러스가 퍼질 수 없는 곳의 크기. 까지 구하는 부분 총 2 부분이 존재하는 것이다 --------------------------------------- 어디에 어떤 벽을 세우면, 바이러스가 얼마나 퍼지는지 '모른다' 모르기 때문에 다 해봐야 한다 즉, Brute Force 문제가 되는 것이다 . 빈칸의 개수는 총 N * M 개 각 칸에는 3가지 벽을 세울 수 있다. 각 칸에 대해서 3가지 경우를 모두 고려한다고 하면 O((N * M) ^ 3.. 더보기
[Python][백준 14502번] 연구소 # https://www.acmicpc.net/problem/14502 ''' 해당 문제는 크게 2가지 부분으로 진행된다 1) 벽을 3개 세우는 부분 > 2) 그리고 벽을 세울 때마다, 바이러스가 퍼질 수 없는 곳의 크기. 까지 구하는 부분 총 2 부분이 존재하는 것이다 --------------------------------------- 어디에 어떤 벽을 세우면, 바이러스가 얼마나 퍼지는지 '모른다' 모르기 때문에 다 해봐야 한다 즉, Brute Force 문제가 되는 것이다 . 빈칸의 개수는 총 N * M 개 각 칸에는 3가지 벽을 세울 수 있다. 각 칸에 대해서 3가지 경우를 모두 고려한다고 하면 O((N * M) ^ 3.. 더보기
[Python][백준 5557번] 1학년 # bottom-up : 가는 방향 고려 import sys import heapq import math from collections import deque sys.stdin = open("input.txt", "rt") sys.setrecursionlimit(1001*1001) ''' n개의 숫자가 있다고 한다면 등식을 넣을 수 있는 자릿수는 n-1개 가 될 것이다 하지만, 마지막에는 '등호 ='를 넣는다고 했기 때문에 실제 +,- 를 넣을 수 있는 곳의 개수는 n - 2 개가 된다 따라서, 총 경우의 수는 2 ^ (n-2) 개가 있는 것이다 하지만, n기 100개, 2 ^ 98까지를 모두 고려해야 한다는 점에서 시간초과를 고려할 수 밖에 없다 -------------------------------.. 더보기
백준알고리즘python_오큰수_스택 # https://www.acmicpc.net/problem/17298 import sys sys.stdin = open("input.txt", "rt") from collections import deque sys.setrecursionlimit(10000) ''' 이 문제는 스택을 사용한다. 특이한 점은, 스택에 일반적인 경우와 같이 값을 저장하는 것이 아니라, idx를 저장한다는 것이다. 최종적인 답. 인 result 배열을 선언해준다. 오큰수가 없는 idx 값을 위해 모든 원소를 -1로 초기화해준다 stack에는 idx가 들어간다고 했다. 우리는 stack의 맨 위 값, 즉 stack 맨위에 저장된 idx, 그 idx에 위치한 값과, 현재 우리가 보고 있는 nums[i]라는 값을 비교한다. 우리는.. 더보기