[BOJ] 14502 연구소
·
코딩테스트/Python
총 3가지의 step으로 문제를 해결하고자 했다. 1) 벽을 세울 수 있는 모든 경우의 수 탐색 - 3개의 벽을 세우는 것이므로 combination 을 활용하자2) 벽을 세웠을 때 바이러스 퍼트리기 - dfs를 활용해보자3) 맵을 전체적으로 훑으면서 바이러스가 퍼지지 않은 안전 지역을 찾자 trouble shooting2 단계를 구현할 때 처음에는 바이러스가 퍼진다면 이걸 Map에 반영하여 2로 바꿔주도록 코드를 구현하였으나다시 map을 초기화하는 과정이 한번 더 들어가면서 코드가 복잡해짐과 동시에 오래걸린다는 것을 알게되었다.(그래서 temp_map을 두고 할당 받는 방식을 생각했으나 결국 같은 메모리를  참조하는 것이지 복사하는게 아니라서 동일한 문제가 발생함!) 따라서 바이러스가 퍼진다면 isVi..
[BOJ] 4949 균형잡힌 세상
·
코딩테스트/Python
오늘 해결한 문제도 정말정말 간단하게 pop 연산을 활용해서 온전한 괄호의 매칭 여부를 확인해주기만 하면 되는 문제였다!! import sysfrom collections import deque#sys.stdin = open("input.txt", "r")while True: s = input() if s == ".": break s = list(s) flag = 0 q1 = deque() q2 = deque() for ss in s: if ss == "(" or ss == ")" or ss == "[" or ss == "]": q1.append(ss) while q1: ns = q1.pop() ..
[BOJ] 1992 쿼드트리
·
코딩테스트/Python
오늘의 문제 완료!~!import sys#sys.stdin = open("input.txt", "r")N = int(input())mapp = [list(map(str, input())) for _ in range(N)]def quard(y, x, size): tmp = mapp[y][x] if size == 1: return tmp ret = "" for i in range(y, y+size): for j in range(x, x+size): if tmp != mapp[i][j]: ret += "(" ret += quard(y, x, size//2) ret ..
[프로그래머스] 네트워크
·
코딩테스트/Python
오늘 해결한 문제는 DFS를 이용하면 간단히 해결할 수 있는 문제였다! def solution(n, computers): isVisited = [False] * n answer = 0 def DFS(computers, n, point): isVisited[point] = True for i in range(n): if computers[point][i] == 1 and isVisited[i] == False: DFS(computers, n, i) for i in range(n): if isVisited[i] == False: DFS(compute..
[BOJ] 9996 한국이 그리울 땐 서버에 접속하지
·
코딩테스트/Python
오공완!!이 문제를 보면서 컴파일러 수업 때 배웠던 정규식의 악몽이 떠올랐는데... import sys#sys.stdin = open("input.txt", "r")n = int(input())pattern = input()isFront = 0pos = 0for i in range(len(pattern)):    if pattern[i] == "*":        pos = ifront_s = pattern[0:pos:]back_s = pattern[pos+1::]len_s = len(front_s)len_b = len(back_s)# front_s = "".join(s for s in front)# back_s = "".join(s for s in back)for i in range(n):    ss ..
[BOJ] 12014 주식
·
코딩테스트/Python
오늘 푼 문제는 BOJ에 나와있는 주식 문제이다!!binary_search를 이용하면 시간복잡도를 O(NlogN) 으로 관리할 수 있다.  import sysinput = sys.stdin.readlinedef binary_search(left, right, target): while left = K: print(1) else: print(0)
[BOJ 1012] 유기농배추
·
코딩테스트/Python
DFS를 이용한 풀이는 아래와 같다. 메모리를 보호하려고 백준에서는 재귀함수에 제한을 걸어두었다.문제 해결에 필요한 정도의 재귀를 허용하기 위해서 아래 함수를 이용했다. sys.setrecursionlimit(5000) import sys#sys.stdin = open("input.txt", "r")sys.setrecursionlimit(5000)T = int(input())dy = [-1, 0, 1, 0]dx = [0, 1, 0, -1]def DFS(y, x): mapp[y][x] = 0 for i in range(4): ny = y + dy[i] nx = x + dx[i] if ny = N or nx = M: continue ..
[소프티어] 마이크로서버
·
코딩테스트/Python
문제를 간단히 요약하자면T개의 300 - 900 사이의 값이 들어오고 이 것들을 묶어서 900 이하로 유지하는 서버를 최소한으로 구하는 방법에 대한 문제이다. 투포인터를 이리저리 사용하려고 했으나 수많은 if문에 지쳐서 결국 교수님의 강의를 보게 되었다.이 문제의 핵심 아이디어는 input으로 들어오는 값의 범위에 따라 다르게 처리하는 것이다!!(그동안 Input 범위를 정말 소홀하게 봤었는데 반성중,,,) 300301-599600601-900 이렇게 값을 나누고 이 값들의 특징을 생각해본다. 먼저 601-900 이라는 값은 절대 다른 값과 짝을 지어 900보다 작은 값을 만족할 수 없다!앞선 Input들은 sort 함수로 정렬했다고 가정하고 진행한다.따라서 end가 가리키는 값이 601-900 사이라면..
[BOJ 2852] NBA 농구
·
코딩테스트/Python
내가 좋아하는 NBA를 제목으로 가진 문제가 있다니!!  이 문제에서의 키 포인트는 이전 시간을 저장해서 시간끼리 연산을 수행해야 한다는 것! 1) 이전 시간을 저장한다. -> prev라는 변수를 이용해서 저장한다.2) 시간끼리의 연산을 수행한다. -> 분,초로 구성되어 있으므로 초로 변환해서 계산을 수행하고 최종 출력 시에 다시 분, 초로 변환한다.3) 마지막 라운드에서는 48:00과 연산을 통해서 마지막 골에 대한 승리 시간을 더해줘야 한다.   import syssys.stdin = open("input.txt", "r")N = int(input())a , b= 0, 0win_1 = 0win_2 = 0def calTime(time, prev): tt = time.split(":") t_t..
[소프티어] 좌석관리_히든테케1번 python
·
코딩테스트/Python
Bfs와 여러 케이스를 관리해서 적절한 print를 요구하는 문제로 예외케이스 찾기에서 꽤나 머리 아팠던 문제다. import sysN, M, Q = map(int, input().split())seat = [[0] * M for _ in range(N)]status = {}dy = [-1, 0, 1, 0]dx = [0, -1, 0, 1]def seatDown(id): max_safe = -1 my = -1 mx = -1 seat_y = -1 seat_x = -1 stop_f = 0 for i in range(N): if stop_f == 1: break for j in range(M): if seat[..
BOJ 21939. 문제 추천 시스템 Version 1
·
코딩테스트/Python
오늘은 정말정말정말 더운 하루였다☀️차라리 비가 와서 더운게 사라졌으면...!!!! 오랜만에 내 책상에 앉아서 모니터로 코드를 작성했는데 최근에 구매한 내 키보드 타건감이 아주 마음에 드는군!이제 만담은 그만하고 문제로 들어가보자 오늘 푼 문제는 "문제 추천 시스템 Version 1"으로 사실 처음에는 그냥 생각나는대로 고민없이 코드를 짜도 빠르게 해결할 수 있을 것이라 생각해서 도전했는데 생각보다 좀... 걸렸다.  문제에 대한 설명은 위와 같다. 우선 총 세가지 함수를 구현해야하는데, add와 solve의 경우 dictionary를 활용하여 key, value 값으로 조작한다면 간단히 해결이 가능하다. recommend도 정말 쉽게 생각하여 문제에 나와 있듯이, x = 1인 경우 난이도로 정렬, 그리..
BOJ 16168. 퍼레이드 + 오일러 경로 탐색하기
·
코딩테스트/Python
이제 오늘부터 다시 매일매일 공부한 내용을 기록하기 + 1일 1 커밋으로 잔디 채우기를 다시 시작하기로 마음먹었다!!🔥다시 달려 보자고!!!  그래서 이름도 깜찍한 퍼레이드로 문제를 선택했다.  문제를 읽으면서 든 생각은 흠... 누가봐도 그래프 문제군 그러면 또 dfs, bfs 왕창 쓰겠지 라고 생각했는데 마음에 걸린 문장이 하나 있었다.바로..! 같은 지점은 두번 이상 지나도 된다!!일단 내가 아는 일반적인 경로 탐색 문제가 아니였다. 역시 알고리즘 문제를 풀 때 이해안가면 나무에서 숲으로 확장시키는게 나한테 가장 효율적인 방법이라고 생각한다.  이 예제 테스트 케이스를 보면 정점의 갯수, 간선의 갯수가 주어지고 그래프의 간선을 나열해준다.   이 예제를 그리면서 든 생각은 '한붓그리기' 였다!! ..