알고리즘 7

[SWEA] 5250. [파이썬 S/W 문제해결 구현] 7일차 - 최소 비용

문제풀이 2차원 배열의 특정 위치에서 부터 인접 좌표들로 이동을 하면서 최소비용을 구하는 문제 가중치가 없다면 단순 bfs로 해결할 수 있음. 문제에서는 현재좌표의 높이와 새로운 좌표의 높이 차이가 있다면 ( 새로운 좌표가 높다면) 그 높이 만큼을 가중치로 계산함 시작점 (0,0)에서 BFS 탐색을 하면서 각 인접 좌표 (상하좌우)에 대해 간선완화를 진행 한 좌표의 상하좌우에 있는 새로운 좌표 계산 각 좌표가 범위내인지 확인 새로운 좌표의 높이가 현재의 높이보다 높다면 그 차이를 가중치로 계산 높이 차이가 없거나 새좌표가 더 낮으면 가중치는 1 (기본 비용) 새로운 좌표의 현재까지의 최소비용(시작점에서 부터의 최소비용)가 현 좌표를 찍고 가는 것 보다 높으면 새로운 비용으로 갱신 새좌표의 최소비용 > 현..

알고리즘/SWEA 2020.11.12

[백준] 2477. 참외밭 - python

www.acmicpc.net/problem/2477 2477번: 참외밭 첫 번째 줄에 1m^2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1≤K≤20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지나� www.acmicpc.net 입력 변의 방향이 동,서(1,2)일 경우 가로변, 변의 방향이 남,북(3,4)일 경우 세로변임을 알 수 있음. 6각형이고 입력이 순서대로 들어오므로 변의 방향과 길이를 저장하기 위한 2차원 배열을 생성하여 저장함. 문제 풀이 ㄱ자 모양이라는 것에서 아이디어를 얻음 그림과 같이 큰 사각형에서 작은 사각형을 빼면 ㄱ자 도형의 면적을 구할 수 있음 큰 사각형의 면적 주어진 변의 길이중 가장 긴 가로 변, 세로변의 길..

알고리즘/백준 2020.09.23

[python] 재귀(recursion)에 대해서 알아봅시다.

재귀 함수 자기 자신을 호출하는 함수 하나의 함수에서 자신을 다시 호출하여 작업을 수행하는 방식으로 주어진 문제를 푸는 방법 python에서의 기본 재귀 구조는 아래와 같다. 실행결과는 어떻게 될까? 자기자신을 계속 호출하므로, 무한반복에 빠지며 지정된 재귀 깊이를 초과하여 에러가 발생한다. 그렇다면, 무한 루프에 빠지지 않게 하려면 어떻게 해야하는가? 당연하지만 그냥 나 자신을 계속 호출한다면 무한반복이 일어날 것이다. 이 무한한 반복을 우리가 원하는 만큼만 반복하고 중단시키는 것이 우리의 목표다. 우리가 기본적으로 아는 반복문에서와 마찬가지로 반복을 중단시킬 무언가가 필요하다. 즉, 반복을 중단시킬 조건과 그 조건을 체크하기 위한 값을 저장할 변수. 과정을 정리하면 아래와 같다. 매개변수를 하나 받음..

알고리즘 2020.09.16

[python] 코딩테스트 문제에서 입력처리 정리

알고리즘 강의를 하다보면 생각보다 많은 학생들이 입력에서 막혀서 시간을 허비하는 것을 봤다. 이번 기회에 정리해 놓으면 한 분이라도 도움이 될것 같아서 정리해보도록 하겠다!! ^-^ 코딩테스트에서는 대게 input파일이 주어진다. 문제를 풀때 입력을 줘야하는데 가장 간단한 방법은 input 텍스트를 복사해서 프로그램을 실행하고 콘솔창에 붙여넣기 해주는 것이다. 하지만 이 방법은 디버깅시에 귀찮기도 하고, 가끔 발생하는 pycharm 콘솔창 오류를 만나면 난감하다. 이 때, input 파일을 텍스트 파일로 저장하고 바로 읽어서 실행할 수 있도록 설정하면 편하다. 파일로 입력받기 sys 모듈 임포트 표준 입력을 파일/읽기로 설정 import sys #표준입력을 파일로 설정 sys.stdin = open("i..

[백준] 19236. 청소년상어 - python

https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net 삼성SW 역량테스트 기출문제 문제풀이 시뮬레이션 + 완전 탐색(dfs) 물고기이동 번호가 작은 물고기부터 이동 (1~) 이동가능한 칸 빈칸 다른 물고기가 있는 칸 이동할 수 없는 칸 상어가 있는 칸 공간의 경계를 넘는 칸 (맵을 넘어선 칸) 이동할 수 없으면 45도 반시계 회전하고 이동(8방향 모두 확인) 회전을 해도 이동할 칸이 없으면 이동하지 않음 이동시 다른 물고기가 있으면..

알고리즘/백준 2020.07.15

[SWEA] 1949. 등산로 조성 (python)

문제풀이 dfs를 이용하여 최적화를 하는 문제이다. 가장 높은 봉우리에서 부터 탐색을 시작함. 봉우리의 사방을 탐색 다음 길이 낮으면 그대로 탐색 진행(dfs호출) 다음 길의 높이가 같거나 높고 공사를 아직 안했으면 공사를 진행함 공사는 최대 깊이 K만큼 할 수 있음 (1~K) 모든 경우( 모든 공사깊이 ) 를 탐색 공사 후에 다음 길의 높이가 낮아졌다면 dfs를 호출해서 탐색 계속 (dfs호출) 등산로길이의 최대값을 계속 업데이트해서 최대값을 결과로 얻음 소스코드(python) dr = [-1,0,1,0] dc = [0,1,0,-1] def dfs(r,c,path,isConst): global ans if ans < path: #최장 등산로 갱신하기 ans = path #사방 탐색 : 등산로 탐색 fo..

알고리즘/SWEA 2020.07.08

[백준 2628] 종이자르기 - Python

문제 링크 https://www.acmicpc.net/problem/2628 문제 풀이 세로로 잘리는 위치,가로로 잘리는 위치를 저장하기 위한 리스트 생성하고 0 넣어두기 (시작점) 가로인지 세로인지에 따라서 각각 세로리스트, 가로리스트에 저장 마지막 점 추가( 종이의 가로, 세로크기) 가로, 세로 리스트 정렬 가로/세로 리스트의 두점 (첫번째-두번째, 두번째 - 세번째,…)의 거리 구함 그 중에서 최대값을 구하고 각각 곱하면 정답! 소스 코드 (python) C,R = map(int,input().split()) #세로, 가로 크기 N = int(input()) #자르는 횟수 Rarr = [0] #세로로 잘리는 위치 저장 Carr = [0] #가로로 잘리는 위치 저장 for i in range(N): ..

알고리즘/백준 2020.06.23