파이썬 145

[삼성SW역량][Python/BOJ] 백준 15684 사다리조작(dfs)

🐾 20220918 사다리를 어떻게 생각해야할지 생각이 많았는데 지금으로서는 이렇게 생각하는게 제일 쉽다. (아래 사진 참고) 선을 그을수 있는 candidate를 만든다. candidate를 돌면서 그을수 있다면 그으면서 가장 최소의 check가 True인 값을 구한다. 코드 : def check() : # i 번 세로선의 결과가 i가 나오는지 확인 for i in range(1,n+1) : # 세로선을 돌면서 k = i for j in range(1,h+1) : # 선을 놓을 수 있는 곳을 확인 if line[j][k] == 1 : k+=1 elif line[j][k-1] == 1 : k-=1 if i != k : return False return True # added : 그어진 선 개수, num..

[삼성SW역량][Python/BOJ] 백준 14890 경사로(구현)

main에서는 가로와 세로를 차례대로 검사하고 check 함수의 결과가 True인 경우 ans의 값을 늘려준다. check함수는 아래와 같은 경우에는 경사로를 놓을 수 없다. 경사로를 놓은 곳에 또 경사로를 놓는 경우 낮은 칸과 높은 칸의 높이 차이가 1이 아닌 경우 낮은 지점의 칸의 높이가 모두 같지 않거나, L개가 연속되지 않은 경우 경사로를 놓다가 범위를 벗어나는 경우 이러한 경우 return False 를 하고 만약 함수의 끝까지 도달할 경우 retrun True를 한다. True한 경우가 길이 있는 경우이다. 코드 : def check(now) : # 한 행 또는 열을 지나갈 수 있는지 검사 for i in range(1,n) : if abs(now[i-1] - now[i]) > 1 : retu..

[삼성SW역량][Python/BOJ] 백준 15685 드래곤커브(시뮬레이션)

하나씩 그려서 반복되는 규칙을 찾는다. 그 규칙은 바로 1을 더한 후 거꾸로 해서 붙이는 것이다. (이걸 어떻게 생각하누...) 그림을 그린 후 아래 설명을 따라 숫자를 적으면 규칙을 찾을 수 있다. (밑에 그려놓은 그림 참고) 즉, K(K > 1)세대 드래곤 커브는 K-1세대 드래곤 커브를 끝 점을 기준으로 90도 시계 방향 회전 시킨 다음, 그것을 끝 점에 붙인 것이다. 방향은 0, 1, 2, 3 중 하나이고, 다음을 의미한다. 0: x좌표가 증가하는 방향 (→) 1: y좌표가 감소하는 방향 (↑) 2: x좌표가 감소하는 방향 (←) 3: y좌표가 증가하는 방향 (↓) 예를 들어 방향이 1일 때를 해보면 0세대 : 1 1세대 : 1 2 2세대 : 1 2 3 2 3세대 : 1 2 3 2 3 0 3 2 ..

[삼성SW역량][Python/BOJ] 백준 14499 주사위굴리기(시뮬레이션)

삼성문제 특 ) 그냥 빡구현 1,2,3,4 번이 동서남북이 아니라 동서북남이다!!! +) 주사위는 지도의 바깥으로 이동시킬 수 없다. 만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도 하면 안 된다 -> nx,ny를 구하고 지도를 벗어나는지 확인해주어야한다. 코드 : # 동서북남 dx = [0,0,-1,1] dy = [1,-1,0,0] def move(dir) : global x,y nx,ny = x + dx[dir], y + dy[dir] if 0

[삼성SW역량][Python/BOJ] 백준 3190 뱀(시뮬레이션)

시뮬레이션 문제로 문제에서 요구하는 사항을 완성시키면 된다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다. 먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다. 만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다. 만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는다. 1. mp를 입력받는다. 2. 사과의 위치를 1으로 표시한다. 3. 방향을 바꿀 시간을 입력받는다. 4. start() 4-1. 덱에 위치를 넣는다. 4-2. 벽 또는 본인 몸에 부딪히지않았다면 방문을 표시한다. 4-3. 만약 사과가 있다면 꼬리를 제거하지않고 없다면 제거한다. 4-4. 만약 현재 시간이 3에서 입력받은 방향을 바꿀 시간..

[python 구현]DFS에서 꼭 필요한 개념 - 조합 (combination)

N개중에서 r개를 뽑는 경우를 어떻게 구할까? 바로 조합을 이용하면 구할 수 있다. 조합은 중복을 허락하지않고 순서를 생각하지 않는다. n = 4, m = 2 아래 사진이 4까지의 숫자에서 2자리 수를 출력하는 코드의 상태트리이다. D(0,1)에서 처음 시작한다. 0은 level을 1은 start를 의미한다. 출력할 숫자를 담을 배열을 res라고 하자 (크기는 m 만큼이다.) 두번째 인수(start)보다 크거나 같은 수를 res 배열의 level 자리수에 넣어가며 for문을 돌린다. 즉, 위와 같은 경우 res는 0,1 index만 존재하기 때문에 level이 2가 종료 조건이다. 첫번째 인수는 Level이므로 한단계씩 진행됨에 따라 1씩 증가시킨다. 두번재 인수는 res에 들어간 수에서 1을 증가시켜 ..

[삼성SW역량][Python/BOJ] 백준 15686 치킨 배달(DFS)

https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 조합을 이용해서 치킨집들의 조합을 구한다. 이 치킨집들과 집들의 각각 치킨거리를 구해 가장 작은 값을 구하면 된다. 코드 : n,m = map(int,input().split()) mp = [list(map(int,input().split())) for i in range (n)] hs = [] ch = [] cb = [0]*m # 조합 # 선택할 치킨집의 인덱스를 담은 배열..

[삼성SW역량][Python/BOJ] 백준 14891 톱니바퀴(시뮬레이션)

https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 이 문제는 문제와 문제에 나와있는 예시를 잘 읽어야한다. 원래 머리에 생각하고 있는 대로 풀면 틀린다. 처음 풀 때 예시가 잘 이해 안되서 예시가 틀린건가..하고 안봤다가 잘못 이해하고 풀었다. 1. 옆 톱니를 움직인다. (움직인 톱니의 옆친구와 극이 다르면 옆친구도 움직인다.) 2. 해당 톱니를 움직인다. 옆톱니를 움직일 때도 이제는 자신이 해당 톱니가 되어서 옆 톱니를 먼저 확인한다-!! ..

[삼성SW역량][Python/BOJ] 백준 14889 스타트와 링크(DFS, 백트레킹)

https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net # depth은 뽑은 사람의 인원수, idx는 뽑은 사람 다음부터 뽑기위해서 저장 💻 코드 : def dfs(depth, idx) : # depth는 사람의 수 global min_diff if depth == n//2 : power1, power2 = 0,0 for i in range(n) : for j in range(n) : if vis[i] and vis[j] : # i와 j가 동시에 우리팀! power1+= ..

[삼성SW역량][Python/BOJ] 백준 14888 연산자 끼워넣기(DFS)

https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net dfs(idx,val) : val 이 기존 값 , idx는 이제 더할 값의 인덱스 다음 dfs는 val에 idx인덱스의 값을 (더하거나 ,빼거나 곱하거나 나눠주고) idx를 1 증가시킨다.) 그래서 처음에 dfs(1, numbers[0]) 를 호출해주는 것이다. numbers[0]을 가장 초기값으로 idx가 1인 값을 선택된 기호로 계산하여 ..