목록코팅테스트/백준 문제 모음 (296)
For Programmer
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15B1cKAKwCFAYD SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 간단한 bfs 문제이다. 단, 1~100 번까지 어느 번호가 주어질지 모르기 때문에 1번부터100번까지 100크기를 가진 배열을 만들어 놓은 다음 정보가 주어지면 해당 정보를 배열에 추가하는 방식으로 처리했다. 방문처리할때 연락이 되는 순번을 같이 저장함으로써 bfs를 다돌고 난후 가장 마지막 연락되는 사람을 찾는 방식으로 구현하였다. from collections import deque def b..
https://www.acmicpc.net/problem/15662 15662번: 톱니바퀴 (2) 총 8개의 톱니를 가지고 있는 톱니바퀴 T개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net (문제가 너무 길어 링크로 대체합니다.....) 구현문제이나 조금 생각을 많이 해봐야하는 문제입니다. 저는 톱니바퀴끼리의 관계를 True, False로 저장하여 True면 돌 수 없도록 하였고 False면 돌 수 있도록 처리하였습니다. 자세한 설명은 주석으로 달아 놨습니다. # 움직이지 못하는 톱니바퀴 저장 # [1-2] = True, [2-3] = True 와 같은 방식으로 저장 de..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cO518P/btrv8EeP7Zl/iFzkgH2TTW9bGaKx2IUeFk/img.png)
기존의 숫자처리가아닌 알파벳으로 트리를 처리해야하는 문제이다. 딕셔너리와 아스키 코드를 이용하여 문제를 해결하였다. # 전위 순회 def pre_order(v): if v: print(v, end="") pre_order(tree[v][0]) pre_order(tree[v][1]) # 중위 순회 def in_order(v): if v: in_order(tree[v][0]) print(v, end="") in_order(tree[v][1]) # 후위 순회 def post_order(v): if v: post_order(tree[v][0]) post_order(tree[v][1]) print(v, end="") N = int(input()) tree = {} for i in range(65, 65 + N):..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bAwve0/btrv0PBK1aA/cYyXkJ8cnLd94TcNzAwOw1/img.png)
문제를 이해하느라 30분 걸린거 같다. 조금더 설명이 좋았으면 좋겠다. 나머지 구현은 크게 어렵지는 않으나 전개도를 보고 주사위가 만들어졌을 때 각각의 면에 어떤 숫자가 들어가는지 생각하는 것이 생각보다 쉽지 않다;; N, M, r, c, K = map(int, input().split()) maps = [list(map(int, input().split())) for i in range(N)] direct = list(map(int, input().split())) dice = [0, 0, 0, 0, 0, 0] # 주사위의 각면에 써있는 숫자 dr = [-1, 0, 1, 0] # 상 우 하 좌 dc = [0, 1, 0, -1] # 상 우 하 좌 cur_bottom = 5 # 현재 바닥면 for dir ..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV4suNtaXFEDFAUf SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 위 문제 상당히 까다로운 구현이었다. 전형적인 dfs문제이지만 각각의 조건을 처리해주어야 하며 특히, 3번 고려사항: '최대한 많은 Core에 전원을 연결해도, 전원이 연결되지 않는 Core가 존재할 수 있다.' 이 것을 처리하기가 상당히 까다로운 문제였다. 코드에 대해서 주석을 달아 놨다. def remove(depth, dir, error): global connect # 행,열 좌표를 받는다...
https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 문제가 상당히 길어 URL로 남기겠습니다. 위 문제 굉장히 까다로운 구현이었습니다. 사실 어떻게 문제를 해결할지 머릿속에서 구현은 가능했으나 실제로 코드를 옮길려고 하니 생각해야 할 부분들이 너무나도 많았습니다. 특히 cctv가 닿을 수 있는 범위를 # 으로 처리하고 다시 #으로 되어있는 범위를 0으로 바꾸는 식으로 재귀로 구현할 생각했는데 이러한 로직은 문제가 있었습니다. 만약, 다른..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bBLflc/btru4jos4ES/f1h6ifO0fRAGcLymBtImH1/img.png)
이 문제 골드 4이지만 파이썬의 슬라이싱 쓰면 인덱스가 범위를 넘어가는 부분을 고려하지 않아도 돼서 아주 쉽게 한줄로 풀 수 있다. 단, 인덱스를 고려하게 된다면 다음 밑의 if문에 인덱스가 넘어가는 부분을 다음과 같이 고려해야 한다. if len(num) >= 2 * k and j
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/blCPXf/btruUnSW41E/nxkMxKTnVWlwLx8LpyCilk/img.png)
이 문제 계속 문제를 잘못읽어서 한 치킨집에서 젤 가까운 집을 중복없이 계산하는 것인줄 알고 그렇게 구현을 하다가 다시 문제를 읽고 풀었다. 특히 선택된 M 개의 치킨집에서 가장 가까운 집들과의 거리를 구하는 코드를 이중반복문으로 쉽게 할 수 있는걸 계속해서 어렵게 dfs로 구현할려고 하다가 시간이 더 걸렸다. 주석을 달아 자세하게 설명해놨다. def check(select_chicken): global min_ temp = 0 # 뽑은 M개의 치킨집과의 거리 구하기 for i in house: # 집들에서 temp_dis = 1 = min_: # 만약 그거리가 이미 저장된 최솟값보다 크거나 같다면 return # 종료 if temp < min_: # 만약 구한 거리가 최솟값보다 작다면 min_ = te..