인구이동 Solution BFS 모든 나라를 돌면서 국경선을 공유할 나라를 묶는다. 국경선을 공유한 나라의 인구수를 업데이트한다. 인구이동이 없을 때까지 반복한다. 2019.10.19 C++ 풀이 #include #include #include using namespace std; const int MAX = 55; int map[MAX][MAX][2]; bool check[MAX][MAX]; pair rememMap[MAX*MAX]; int N,L,R; queue myQ; int dx[4] = {1,0,-1,0}; int dy[4] = {0,1,0,-1}; int BFS(int y,int x,int nowIdx,int nextIdx){ int count = 0; int sumMap = map[y][x]..
2021.04.03 감시피하기 Solution BruteForce 조합으로 장애물 3개를 놓을 위치를 정한다. 장애물을 놓고 학생들이 선생님들로부터 감시에서 피해지는지 확인한다. import sys sys.stdin = open('input.txt', 'r') from itertools import combinations from copy import deepcopy def check(myMap, y, x): # return go, See if myMap[y][x] == 'S': return False, True elif myMap[y][x] == 'O' or myMap[y][x] == 'T': return False, False e..
2021.03.30 연산자 끼워 넣기 삼성전자 SW 역량테스트 Solution 완전탐색 모든 연산자 순열에 대해서 연산을 해보고 최소/최댓값을 업데이트하는 방식으로 구현하였습니다. # make permutation list에서 순열을 만들 때, 그냥 연산자 숫자로 순열을 만들면 중복되는 순열이 생겨서 시간초과가 발생했습니다. 그래서 set으로 먼저 만든 뒤 list로 변환하여 중복이 없도록 하여 해결하였습니다. import sys sys.stdin = open('input.txt', 'r') from itertools import permutations inf = 9999999999 # Brute Force def solution(N, A, calcPer): minRet = ..
2021.03.30 문제링크 - 괄호 변환 2020 카카오 신입 공채 1차 Solution 문제에 적혀있는 알고리즘 그대로 구현하였습니다. import sys sys.stdin = open('input.txt', 'r') def check(p): tmp = [] for s in p: if s == '(': tmp.append(s) elif s == ')': if len(tmp) == 0: return False else: tmp.pop() if len(tmp) > 0: return False else: return True def solution(p): lenP = len(p) answer = '' # 1. 입력이 빈 문자열인 경우,..
2021.03.28 문제 링크 문제설명 NXN 크기의 시험관 바이러스는 1번부터 K번 중 하나 1초마다 상하좌우 방향으로 증식하며, 번호가 낮은 바이러스 먼저 증식. 증식하려는 곳에 이미 바이러스가 있으면 증식 안함. S초 뒤에 주어진 좌표에 바이러스 종류를 찾는 문제 solution 바이러스 목록을 만듭니다. (맵을 돌며 바이러스가 있다면 해당 번호 목록에 넣음) S초 동안 바이러스가 퍼집니다. 네 방향을 돌며 바이러스가 퍼집니다. 이미 바이러스가 있다면 퍼지지 않습니다. 퍼진 바이러스는 기존 바이러스 목록에 포함시킵니다. (for loop에 영향받지 않도록 새로운 목록에 담아서 나중에 추가하는 방식으로 구현) 주어진 좌표에 있는 바이러스 종류를 리턴합니다. 구현1. 30564KB, 1004ms 한번 ..
2020.02.09 CHAPTER12 구현 문제 삼성전자 SW 역량테스트 뱀 import sys sys.stdin = open('input.txt', 'r') from collections import deque as dq # 이동 위치 Tuple dy = (0, 1, 0, -1) dx = (1, 0, -1, 0) # NxN map (0:빈칸, 1:사과, 2:뱀), 0,0 에서 뱀 시작 N = int(input()) myMap = [[0 for _ in range(N)] for _ in range(N)] myMap[0][0] = 2 # 사과 위치 놓기 K = int(input()) for _ in range(K): y, x = map(int, input().split()) m..
2020.02.01 CHAPTER12 구현 문제 2020 카카오 신입 공채 자물쇠와 열쇠 ''' i : 왼쪽으로부터 떨어진 정도 j : 위쪽으로부터 떨어진 정도 => 각도를 똘리면 4면중 다른 쪽으로부터 떨어진 정도가 된다 0도 (i, j) => (i, j) 90도 (i, j) => (j, N-1 - i) 180도 (i, j) => (N-1 - i, N-1 - j) 270도 (i, j) => (N-1-j, i) ''' def solution(key, lock): answer = False M, N = len(key), len(lock) lockSum = sum([sum(partList) for partList in lock]) # dir 0:0도, 1:90도, ..
2021.01.31 CHAPTER12 구현 문제 2020 카카오 신입 공채 09 문자열 압축 import sys sys.stdin = open("input.txt", "r") def check(_cnt, _n): if _cnt > 1: # 연속으로 중복된 문자열이 존재할 경우 # 중복된 문자열의 개수(_cnt)의 자릿수 # (ex. 3개면 1자리, 12개면 2자리)를 계산해서 # 문자열의 길이(_n)와 더해 리턴한다. ret = 0 while _cnt > 0: ret += 1 _cnt //= 10 return _n + ret else: # 연속으로 중복된 문자열이 존재하지 않으면 그냥 문자열의 길이(_n) 리턴. return _n def solution(s): answer = float('inf&..
2021.01.31 CHAPTER12 구현 문제 08 문자열 재정렬 import sys sys.stdin = open("input.txt", "r") def getResult(_input): ret = '' front = 0 back = len(_input) - 1 if _input[front] >= ord('A') or _input[back] = ord('A'): back = mid else: front = mid ret += ''.join(l..
Comment