728x90

전체 글 306

[Python Algorithm] 이분탐색(결정알고리즘) - 마구간 정하기

> 이분 탐색(결정알고리즘) & 그리디 알고리즘 (이분 탐색 편) 📖 문제 : 마구간 정하기 N개의 마구간이 수직선상에 있습니다. 각 마구간은 x1, x2, x3, ......, xN의 좌표를 가지며, 마 구간간에 좌표가 중복되는 일은 없습니다. 현수는 C마리의 말을 가지고 있는데, 이 말들은 서로 가까이 있는 것을 좋아하지 않습니다. 각 마구간에는 한 마리의 말만 넣을 수 있고, 가장 가까운 두 말의 거리가 최대가 되게 말을 마구간에 배치하고 싶습니다. C마리의 말을 N개의 마구간에 배치했을 때 가장 가까운 두 말의 거리가 최대가 되는 그 최대 값을 출력하는 프로그램을 작성하세요. 입력설명 첫 줄에 자연수 N(3

[Python Algorithm] 이분탐색(결정알고리즘) - 뮤직비디오

> 이분 탐색(결정알고리즘) & 그리디 알고리즘 (이분 탐색 편) 📖 문제 : 뮤직비디오 지니레코드에서는 불세출의 가수 조영필의 라이브 동영상을 DVD로 만들어 판매하려 한다. DVD에는 총 N개의 곡이 들어가는데, DVD에 녹화할 때에는 라이브에서의 순서가 그대로 유지 되어야 한다. 순서가 바뀌는 것을 우리의 가수 조영필씨가 매우 싫어한다. 즉, 1번 노래와 5번 노래를 같은 DVD에 녹화하기 위해서는 1번과 5번 사이의 모든 노래도 같은 DVD에 녹화해야 한다. 또한 한 노래를 쪼개서 두 개의 DVD에 녹화하면 안된다. 지니레코드 입장에서는 이 DVD가 팔릴 것인지 확신할 수 없기 때문에 이 사업에 낭비되는 DVD를 가급적 줄이려고 한다. 고민 끝에 지니레코드는 M개의 DVD에 모든 동영상을 녹화하기..

[Python Algorithm] 이분탐색(결정알고리즘) - 랜선 자르기

> 이분 탐색(결정알고리즘) & 그리디 알고리즘 (결정알고리즘 편) 📖 문제 : 랜선 자르기 엘리트 학원은 자체적으로 K개의 랜선을 가지고 있다. 그러나 K개의 랜선은 길이가 제각각이 다. 선생님은 랜선을 모두 N개의 같은 길이의 랜선으로 만들고 싶었기 때문에 K개의 랜선을 잘라서 만들어야 한다. 예를 들어 300cm 짜리 랜선에서 140cm 짜리 랜선을 두 개 잘라내면 20cm 은 버려야 한다. (이미 자른 랜선은 붙일 수 없다.) 편의를 위해 랜선을 자를때 손실되는 길이는 없다고 가정하며, 기존의 K개의 랜선으로 N개의 랜선을 만들 수 없는 경우는 없다고 가정하자. 그리고 자를 때는 항상 센티미터 단위로 정수 길이만큼 자른다고 가정하자. N개보다 많이 만드는 것도 N개를 만드는 것에 포함된다. 이때 ..

[Python Algorithm] 이분탐색(결정알고리즘) - 이분 검색

> 이분 탐색(결정알고리즘) & 그리디 알고리즘 (이분 탐색 편) 📖 문제 : 이분 검색 임의의 N개의 숫자가 입력으로 주어집니다. N개의 수를 오름차순으로 정렬한 다음 N개의 수 중 한 개의 수인 M이 주어지면 이분검색으로 M이 정렬된 상태에서 몇 번째에 있는지 구하는 프로그램을 작성하세요. 단 중복값은 존재하지 않습니다. 입력설명 첫 줄에 한 줄에 자연수 N(3

[Python Algorithm] 탐색&시뮬레이션(2차원 리스트 탐색) - 격자판 회문수

> 탐색 & 시뮬레이션 (2차원 리스트 탐색 편) 📖 문제 : 격자판 회문수 1부터 9까지의 자연수로 채워진 7*7 격자판이 주어지면 격자판 위에서 가로방향 또는 세로방향으로 길이 5자리 회문수가 몇 개 있는지 구하는 프로그램을 작성하세요. 회문수란 121과 같이 앞에서부터 읽으나 뒤에서부터 읽으나 같은 수를 말합니다. 빨간색처럼 구부러진 경우(87178)는 회문수로 간주하지 않습니다. 입력설명 1부터 9까지의 자연수로 채워진 7*7격자판이 주어집니다. 출력설명 5자리 회문수의 개수를 출력합니다. 입력예제 1 2 4 1 5 3 2 6 3 5 1 8 7 1 7 8 3 2 7 1 3 8 6 1 2 3 2 1 1 1 3 1 3 5 3 2 1 1 2 5 6 5 2 1 2 2 2 2 1 5 출력예제 1 3 코드 ..

[Python Algorithm] 탐색&시뮬레이션(2차원 리스트 탐색) - 스도쿠 검사

> 탐색 & 시뮬레이션 (2차원 리스트 탐색 편) 📖 문제 : 스도쿠검사 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9 개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다음을 보자. 위 그림은 스도쿠를 정확하게 푼 경우이다. 각 행에 1부터 9까지의 숫자가 중복 없이 나오 고, 각 열에 1부터 9까지의 숫자가 중복 없이 나오고, 각 3×3짜리 사각형(9개이며, 위에서 색 깔로 표시되었다)에 1부터 9까지의 숫자가 중복 없이 나오기 때문이다. 완성된 9×9 크기의 수도쿠가 주어지면 정확하게 풀었으면 “YES", 잘 못 풀었으면 ”NO"를 출 력하는 프로그램을 작성하세요. 입력설명 첫 번째 줄에 완성된..

[Python Algorithm] 탐색&시뮬레이션(2차원 리스트 탐색) - 봉우리

> 탐색 & 시뮬레이션 (2차원 리스트 탐색 편) 📖 문제 : 봉우리 지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자 판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요. 격자의 가장자리는 0으로 초기화 되었다고 가정한다. 만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다. 입력설명 첫 줄에 자연수 N이 주어진다.(1a[i+dx[k]][j+dy[k]] for k in range(4)): for문을 통해 나오는 모든 값이 참일 경우 참으로 판단하는 all()을 활용한 if문 => if all(a[i][j]>a[i+dx[k]][j+dy[k]] for k i..

[Python Algorithm] 탐색&시뮬레이션(2차원 리스트 탐색) - 곶감(모래시계)

> 탐색 & 시뮬레이션 (2차원 리스트 탐색 편) 📖 문제 : 곶감(모래시계) 현수는 곳감을 만들기 위해 감을 깍아 마당에 말리고 있습니다. 현수의 마당은 N*N 격자판으 로 이루어져 있으며, 현수는 각 격자단위로 말리는 감의 수를 정합니다. 그런데 해의 위치에 따라 특정위치의 감은 잘 마르지 않습니다. 그래서 현수는 격자의 행을 기준으로 왼쪽, 또는 오른쪽으로 회전시켜 위치를 변경해 모든 감이 잘 마르게 합니다. 만약 회전명령 정보가 2 0 3이면 2번째 행을 왼쪽으로 3만큼 아래 그림처럼 회전시키는 명령 입니다. 첫 번째 수는 행번호, 두 번째 수는 방향인데 0이면 왼쪽, 1이면 오른쪽이고, 세 번째 수는 회 전하는 격자의 수입니다. M개의 회전명령을 실행하고 난 후 아래와 같이 마당의 모래시계 모양..

[Python Algorithm] 탐색&시뮬레이션(2차원 리스트 탐색) - 사과나무(다이아몬드)

> 탐색 & 시뮬레이션 (2차원 리스트 탐색 편) 📖 문제 : 사과나무(다이아몬드) 현수의 농장은 N*N 격자판으로 이루어져 있으며, 각 격자안에는 한 그루의 사과나무가 심어저 있다. N의 크기는 항상 홀수이다. 가을이 되어 사과를 수확해야 하는데 현수는 격자판안의 사 과를 수확할 때 다이아몬드 모양의 격자판만 수확하고 나머지 격자안의 사과는 새들을 위해서 남겨놓는다. 만약 N이 5이면 아래 그림과 같이 진한 부분의 사과를 수확한다. 현수과 수확하는 사과의 총 개수를 출력하세요. 입력설명 첫 줄에 자연수 N(홀수)이 주어진다.(3

[Python Algorithm] 탐색&시뮬레이션(2차원 리스트 탐색) - 격자판 최대합

> 탐색 & 시뮬레이션 (2차원 리스트 탐색 편) 📖 문제 : 격자판 최대합 5*5 격자판에 아래롸 같이 숫자가 적혀있습니다. N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합니다. 입력설명 첫 줄에 자연수 N이 주어진다.(1largest: largest = sum2 # 대각선 검사 sum1 = sum2 = 0 for i in range(n): sum1+=a[i][i] sum2+=a[i][n-i-1] if sum1>largest: largest = sum1 if sum2>largest: largest = sum2 print(largest) ⭐️ Point ! ⭐️ 이차원 배열 입력 받기 ! [list(map(int, input().split())) for ..

728x90