Algorithm 115

풀었지만 만족스럽지 못한 (골드 5)

#14502번 연구소 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 잘 풀었다. import sys input = sys.stdin.readline N, M = map(int, input().split()) maps = [] viruses = [] walls = [] zeros = [] for i in range(N): tmp = list(map(int, input().split())) for j in range(M): if tmp[j] == 1: wal..

아아앍ㄺ 파이썬 시간초과 ㅠㅠ (골드 4)

#9019번 DSLR https://www.acmicpc.net/problem/9019 9019번: DSLR 네 개의 명령어 D, S, L, R 을 이용하는 간단한 계산기가 있다. 이 계산기에는 레지스터가 하나 있는데, 이 레지스터에는 0 이상 10,000 미만의 십진수를 저장할 수 있다. 각 명령어는 이 레지스터에 www.acmicpc.net 최소 연산 횟수 (최단거리 등) 은 무조건 BFS! 바로 짰다! 시간초과 코드 def cal_d(num): return num*2 % 10000 def cal_s(num): num -= 1 if num X라고 할 때 2) que 저장 위 과정을 S R L 모두 반복 이후 X 앞에 있는 모든 que 해결 1) X 호출 2) 정답여부 확인 이렇게 진행된다. 때문에 q..

프로그래머스 SQL 고득점 kit

1. SELECT 부분 - ORDER BY 옵션에는 ASC 와 DESC가 있다. 내림차순이 4글자인걸 기억하자. - WHERE 사용법 - WHERE column = 'data' : 동일할 때 - WHERE column != 'data' : 다를 때 - WHERE column is NULL : NULL값일 때 - WHERE column is not NULL : NULL이 아닐 때 2. SUM, MAX, MIN 부분 - 갯수 세기 - SELECT COUNT(*) FROM DATE_TABLE; : 이렇게 세고자 하는 대상에 COUNT()를 사용해주면 된다. - SELECT COUNT( DISTINCT * ) FROM DATA_TABLE; : 이렇게 하면 유일값 기준으로 갯수를 세준다. 3. GROUP BY 부..

파이썬 시간초과의 늪 (골드 4)

#1987번 알파벳 https://www.acmicpc.net/problem/1987 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 잘 짰다. 열심히 짰다.!... 틀린코드 r, c = map(int, input().split()) graph = [[ord(x)-65 for x in input()] for _ in range(r)] # ord(alphabet) - 65 : A(idx = 0) ~ Z (idx = 25) alpha = [False]*26 # print(ord("A")) : 65 # pr..

이젠 스도쿠 천재 (골드4)

#2580 스도쿠 https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 틀린코드 (with while and que) matrix = [] target = [] # get input and save target position for i in range(9): tmp = input().split() l = [] for j in range(9): if int(tmp[j]) == 0: target.append([i, j]) l.append(int(tmp..

아깝...! (골드 4)

#16197번 두 동전 https://www.acmicpc.net/problem/16197 16197번: 두 동전 N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고, www.acmicpc.net 열심히 코드를 짰다. DFS로 도전했다가 재귀 깊이 에러가 나서 (에초에 종료조건이 없었다.) BFS로 변경했다. (최단거리 문제는 너비우선 탐색이 좋다.) 틀린코드 1 r, c = map(int, input().split()) graph = [] coins = [] for i in range(r): row = input() tmp = [] for j in range(c)..

아니.. 난 아직 멍청하다 (dfs)

#14225 부분수열의 합 https://www.acmicpc.net/problem/14225 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 www.acmicpc.net 유사한 문제를 가볍게 풀었던 경험이 있다. 쉬울거라고 생각했는데 자꾸 시간초과가 나서 짜증났다. 시간초과가 난 코드 N = int(input()) nums = list(map(int, input().split())) visited = [False]*N output = [] result = [False]*..

때론 머리를 비우기도 하기 (실버2)

#15658번 연산자 끼워넣기 (2) https://www.acmicpc.net/problem/15658 15658번: 연산자 끼워넣기 (2) 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1보다 크거나 같고, 4N보다 작거나 같은 4개의 정수가 주어지는데, 차례대 www.acmicpc.net 자꾸 복잡하게만 생각하는게 내 흠인 것 같다. 간결한 코드도 좋지만 조금은 편하게 쉽게 생각할 필요가 있다. N = int(input()) nums = list(map(int, input().split())) cals = list(map(int, input().split())) # +, -, *, / ..

뇌가 돌아오는중 (그리디, 브루트포스)

제주 여행을 다녀왔다. (2/7~2/9) 운전을 너무 많이하고 술과 커피에 쩔어있다보니 여행이 끝난 후 3일을 내리 잠만 잤다 (하루 10시간) 너무 피곤해서 계속 브론즈만 풀다가 오늘 드디어 골드를 풀었다! (뇌가 풀렸다는 뜻. 아마도) 그리디와 브루트포스에 대해 알아보자 Greedy (그리디) : 탐욕스러운, 욕심많은 매 순간 최적의 상황만을 쫓아 최종적인 해답에 도달하는 방법이다. Brute Forde (브루트 포스) : 무식한, 힘 가능한 모든 경우의 수를 탐색하면서 요구조건에 충족되는 결과만을 가져온다. 예외 없이 100% 확률로 정답만을 출력한다. #1339 단어수학 https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ..

난생 처음 풀어본 골드2 (뚝배기 깨짐)

#2250번 트리의 높이와 너비 https://www.acmicpc.net/problem/2250 2250번: 트리의 높이와 너비 첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다. www.acmicpc.net 생각보다 어려운 문제가 아니라서 놀랬다. 난이도가 높아질수록 코드의 길이가 길어지는 듯 하다 그냥 조금씩 차분히 해나가면 된다. 아직은 내 머릿속에 있는 논리를 코드로 구현하는 능력이 많이 부족한 듯 하다. 더 많은 경험이 필요함을 느꼈다. import sys # 재귀 제한 설정 sys.setrecursionlimit(100000) input = ..

728x90