본문 바로가기

개발자 강화

(128)
[백준] 10026 적록색약 / BFS / Python 골5 (개발자 강화/코딩 테스트) 2024. 11. 25. 14:46 BFS 한번 풀면 BFS만 계속 푼다는 루머를 안믿었는데간단한 BFS는 그냥 바로 풀이가 눈에 보이고... 손에 한번만 익히면 다 풀 수 있어서...이것도 그냥 보자마자 바로 짜서 푼듯 2~30분 정도 걸린 듯? 적록색약이 아닌 경우 (no)적록색약인 경우(yes)로 함수를 나누고 이중 for문으로 그림 요소를 모두 탐색할 때visited 배열을 적록색약인 경우 or not 각각 2개 둬서탐색되지 않은 원소만 bfs로 진입한다 적록색약이 아닌 경우는 현재 입력된 문자와 같은 경우만 q에 append하고,적록색약인 경우에는 현재 입력된 문자가 B인 경우에는 B만 q에 append, R or G인 경우에는 R or G를 모두 q에 append한다 이렇게 bfs를 술술 짰더니 바로 맞았습니다가 떴다   fro..
[백준] 5567 결혼식 / BFS / Python 실2 (개발자 강화/코딩 테스트) 2024. 11. 24. 22:56 https://www.acmicpc.net/problem/5567 BFS를 이용해 탐색하는데, depth 제한이 있음에 주의해야 한다 일단 상근이 학번인 1부터 시작한다 q를 돌면서현재 탐색 중인 요소 번째에 친구 관계를 분석한다만약 탐색한 적이 없는 친구면, visited로 바꿔주고,초대할 친구 목록에 추가해준다초대할 친구 목록은 set으로 선언했기 때문에 중복되지 않는 요소만 추가된다 추가 탐색은 친구의 친구까지만 가능하기 때문에현재 탐색 요소가 상근를 기준으로 친구를 탐색할 때만 q에 추가한다 그 외에 q에 추가할 경우, 친구의 친구의 친구를 탐색할 수 있기 때문 탐색을 모두 마친 후 invite의 길이를 출력하면 된다 from collections import dequen = int(input()..
[백준] 1806 부분합 / 투포인터 / Python 골4 (개발자 강화/코딩 테스트) 2024. 11. 23. 17:54 https://www.acmicpc.net/problem/1806  이중 for문으로 그대로 구현했을 때는 시간초과가 떴다n,s = map(int, input().split())a = list(map(int,input().split()))# 연속 부분합 중 합이 s가 되는 것 중 가장 짧은 것l=100001for i in range(n): tl=0 r=0 for j in range(i+1,n): tl+=1 r+=a[j] if r>=s: l = min(l,tl) breakprint(l) 반복문은 한 번만 돌려야 0.5초 제한을 맞출 수 있을 것 같았음 두루뭉술하게 떠올렸을 때쭉 선형 탐색을 하면서 누적합을 하는데,..
[백준] 14719 빗물 / 구현 / Python 골5 (개발자 강화/코딩 테스트) 2024. 11. 23. 16:16 https://www.acmicpc.net/problem/14719 SWEA에서 풀었던 VIEW 문제와 비슷하다고 생각햇음접근법은 좀 다르지만.. 결국 아이디어는 다른 블로그를 통해 얻긴 했는데 빗물이 고일 수 있는 위치는 1에서 n-2번째 블록이고, for문 범위를 잡는다현재 i번째 블록에서 좌, 우를 탐색한다 좌에서 max인 값과 우 에서 max값을 찾으면내 블록 위로 고일 수 있는 좌,우 기둥의 max값을 알 수 있음어차피 빗물은 벽이 아무리 멀리 떨어져있어도, 나보다 높은 좌우 기둥이 있으면 무조건 고임 좌,우 기둥 중 min값에 맞춰 빗물이 최대로 고일 수 있음 그리고, 그 좌,우 min 값 중 나 자신의 높이를 빼면 내 위치에서 고이는 빗물의 높이를 알 수 있음 그러나 좌,우min-나자신 값이..
[백준] 회전초밥 / Python 실1 (개발자 강화/코딩 테스트) 2024. 11. 22. 11:37 https://www.acmicpc.net/problem/2531처음에 했던 생각 for문으로 n개의 초밥을 탐색하면서i번째 초밥부터 k개의 초밥을 set으로 묶어서 종류를 헤아린 후종류 안에 c 쿠폰 초밥이 포함되지 않으면 1을 더해준 후이전 i-1번째 초밥까지 헤아린 종류 수 중 최댓값을 변수에 저장해놓고현재 상태에서 max로 비교해서 업데이트하면 어떨까 = 시간초과 엔딩 #접시, 초밥가짓수, 연속, 쿠폰번호n,d,k,c = map(int,input().split())a = [int(input()) for _ in range(n)]#쿠폰번호가 포함되지 않은 k개를 먹으면 최대가짓수?dp = [0]*n#i번째 위치에서 k개를 먹을 때 가짓수?s=0for i in range(n): temp=[] ..
[이취코] 음료수 얼려먹기 / BFS / Python (개발자 강화/코딩 테스트) 2024. 11. 21. 22:50 2차원 배열에서 0은 빈공간, 1은 벽얼음 개수를 구하는거라 0으로 구성된 묶음이 총 몇 개인지 구하면 됨 BFS의 전통적인 문제로... 전설의 문제 '그림'과 같은 형태 from collections import dequen,m = map(int,input().split())a = [list(map(int,input().strip())) for _ in range(n)]visited = [[False for _ in range(m)] for _ in range(n)]dx=[0,0,1,-1]dy=[1,-1,0,0]def bfs(i,j): q = deque() q.append([i,j]) visited[i][j]=True while q: cur = q.popleft() ..
[이취코] DP 실전 - 못생긴 수 / Python (개발자 강화/코딩 테스트) 2024. 11. 21. 22:05 2,3,5만을 약수로 가지는 합성수를 못생긴 수라고 한다1은 못생긴 수라고 가정한다n번째 못생긴 수를 구하자 처음 아이디어 접근 일단 1,2,3,4,5가 못생긴 수인건 맞으니dp = [1,1,1,1,1] 로 세팅한다 n이 5보다 작은 경우에는 n을 return하도록 한다 그 이상은 dp를 구한다 못생긴 수를 세는 cnt와 현재 수를 나타내는 cur 변수를 둔다while문을 돌며 cnt가 n에 도달하면 멈춘다 while문 내에서 현재 살펴보는 수를 1씩 증가시킨다현재 수가 2or3or5로 나누어떨어지고, dp[i//(2or3or5)-1]값이 1이라면그 수는 2,3,5만을 인수로 가진다는 뜻못생긴 수 cnt를 증가시키고, dp에도 못생긴 수라는 뜻으로 1을 삽입 그 외에는 0을 삽입한다 마지막에 현재 숫자를..
[백준/이취코] 정수삼각형 1932 / DP / Python 실1 (개발자 강화/코딩 테스트) 2024. 11. 21. 16:59 내가 이걸 1년 전에 왜 풀었을까...? 그땐 실력이 별로라서 독자적으로 풀진 않았을 듯 한데오늘은 거의 뭐 15분컷? 했습니다너무 자명한 문제죠그림에 써진 웨에엑 신경쓰지 마세요 무튼 이런 트리 구조의 정수 값을 입력 받고,각 수들은 왼쪽 또는 오른쪽 대각선 값만 접근할 수 있습니다 이걸 다 입력받고 다시 처리할까?하다가 문득 실시간 처리가 가능하다는 생각이 들었어요그래서 그림으로 그려봤습니다 누적 dp 배열과현재 입력받은 배열 a가 존재한다고 생각해봅시다 일단 첫번재 배열 a에는 원소 하나만 있고, dp도 빈 상태니까dp.append(a) 해주고 넘깁니다 그 다음부터 dp 점화식을 세워봅시다 배열 a의 가장 첫 번째 원소는 dp의 첫번째 원소와 더한 값이고배열 a의 가장 마지막 원소는 dp의 가장 마..
[백준] 1520 내리막길 / DP / Python / 골3 (개발자 강화/코딩 테스트) 2024. 11. 21. 13:03 부제: 무한 런타임 에러 해결하기 처음에 접근하려고 했던건   일단 현재 위치가 0이 아니어야 어딘가로부터 이동경로를 받을 수 있다는 뜻그래서 0이 아닌 경우에만 탐색함 상하좌우에서 현재 위치로 이동하는 경우에상하좌우에서 받을 수 있는 max값을 현재 위치의 이동 가능 경로로 세팅해둠 그리고 현재 위치에서 상,하,좌,우로 이동할 때 현재 수보다 이동한 위치의 수가 작으면 내리막길이니까이동 가능 경로 개수를 업데이트 해주고 싶음각 상하좌우로 이동했을 때 위치에다가현재 위치의 이동 경로 개수를 그대로 받는 경우 또는... 이동한 위치의 이동 경로 개수+1 값을 비교해서max값으로 업데이트를 해줬음  m,n = map(int,input().split())arr = [list(map(int,input().spl..
[백준] 10942 팰린드롬? / DP / Python / 골4 (개발자 강화/코딩 테스트) 2024. 11. 20. 23:10 https://www.acmicpc.net/problem/10942 부제: 시간초과와의 싸움너무 정직하게 구현했더니 시간초과 뜸질문에 따라 주어진 배열을 list[s:e+1]로 끊어서그 배열을 for문 돌려서 팰린드롬인지 검증했는데, 이렇게 하니까 시간초과 뜸dp를 쓰는 방법을 고민하자 n = int(input())l = list(map(int, input().split()))l.insert(0,0)m = int(input())for i in range(m): s,e = map(int,input().split()) temp = l[s:e+1] leng = len(temp) if leng==1: print(1) continue for j in range(..