[DFS/BFS] 연산자 끼워넣기
·
알고리즘_코딩테스트/이것이 코딩테스트다
"이것이 코딩테스트다(나동빈 저)"에서 나온 문제에 대한 코드를 다루고 있습니다. 문제에 대한 구체적인 설명과 조건 등은 책을 참고해주시기 바랍니다. 소요시간: 30분 + a 1. 문제 설명 - 숫자가 순서대로 N개 주어지고, 연산자가 N-1개 주어진다. 연산자를 수 사이에 넣어서 다양한 식을 만들 때, 그 결과가 최대가 되는 경우와 최소가 되는 경우를 출력하는 문제 2. 접근 방식 - DFS를 활용해서 문제를 푼다. - +, -, *, / 연산자의 개수에 해당하는 만큼 연산을 수행할 수 있게 코드를 만든다. 3. 코드 n = int(input()) data = list(map(int, input().split())) add, minus, mul, div = map(int, input().split())..
[DFS/BFS] 괄호변환
·
알고리즘_코딩테스트/이것이 코딩테스트다
"이것이 코딩테스트다(나동빈 저)"에서 나온 문제에 대한 코드를 다루고 있습니다. 문제에 대한 구체적인 설명과 조건 등은 책을 참고해주시기 바랍니다. 소요시간: 40분 + a 1. 문제 설명 - 괄호( '( )')가 주어졌을 때, 이것이 서로 짝이 맞는지 확인하고 맞지 않는다면 짝을 맞출 수 있도록 재귀적으로 코드를 만드는 문제 2. 접근 방식 - DFS라는 것은 문제 설명으로 알 수 있었다. - 하지만 DFS보다는 구현과 관련된 문제라는 생각이 들었다. - 그래서 문제를 푸는데 꽤나 힘들었고, '완전한 문자열'로 만드는 키 아이디어를 생각하지 못해서 결국 해답을 봐버렸다. - 완전한 문자열로 만드는 경우 해답에서는 균형잡힌 문자열을 입력으로 받아서 균형이 안맞는 경우가 생기면 False를 리턴하는 함수..
[DFS/BFS] 경쟁적 전염
·
알고리즘_코딩테스트/이것이 코딩테스트다
"이것이 코딩테스트다(나동빈 저)"에서 나온 문제에 대한 코드를 다루고 있습니다. 문제에 대한 구체적인 설명과 조건 등은 책을 참고해주시기 바랍니다. 소요시간: 26분 1. 문제 설명 - 여러 바이러스가 존재하는데 바이러스는 인접한 위치로 전파가 된다. 특정 시간 초 이후에 좌표를 입력으로 줄 때, 해당 좌표의 값은 무엇인지 묻는 문제 2. 접근 방식 - BFS를 활용해서 문제를 풀면 되겠다고 생각을 했다. - 초기에 그래프를 생성할 때 어떤 식으로 그래프를 생성하는 지에 대한 고민이 필요한 문제라고 생각을 했다. - 초기 데이터를 (바이러스 종류, 시간, x좌표, y좌표)를 튜플형태로 묶어서 리스트에 넣어주는 부분을 알고나니 수월하게 문제를 풀 수 있었다. 3. 코드 from collections im..
[DFS/BFS] 연구소
·
알고리즘_코딩테스트/이것이 코딩테스트다
"이것이 코딩테스트다(나동빈 저)"에서 나온 문제에 대한 코드를 다루고 있습니다. 문제에 대한 구체적인 설명과 조건 등은 책을 참고해주시기 바랍니다. 소요시간: 40 +a 1. 문제 설명 - 바이러스를 막기 위해 울타리를 세우는 경우 중 안전지대를 최대한 많이 확보하는 방법을 찾는 문제 2. 접근 방식 - DFS문제인 거 같았다. 하지만 접근 방법을 동서남북을 다 살펴보는 방법까지는 생각했는데 그 이상은 생각하지 못했다. - 결국 해답을 봤을 때, '조합'을 이용하는 문제였다. 참조한 해답지에서는 dfs를 활용해서 조합을 구현했다. - dfs구조를 보게 되면 count가 3일 경우 virus검사를 진행하고, 점수를 출력한다. - 3이 아니라면 계속해서 재귀로 들어가면서 울타리를 치고 또 거두면서 진행한다..
[DFS] 음료수 얼려 먹기
·
알고리즘_코딩테스트/이것이 코딩테스트다
1. 문제 - 특이하게 생긴 얼음 틀에 얼음을 몇 개나 만들 수 있는지를 구함 - 주변에 유사한 값의 개수를 찾는다. 2. 코드 구현 n, m = map(int, input().split()) ice = [] for _ in range(n): ice.append(list(map(int, input()))) # True의 개수만 셀 수 있게 만들어준다. def dfs(x, y): if x =n or y>= m: return False if ice[x][y]==0: ice[x][y] = 1 dfs(x-1, y) dfs(x, y-1) dfs(x+1, y) dfs(x, y+1) return True return False result = 0 for i in range(n): fo..