반응형

알고리즘 24

[백준 파이썬] 보물 1026

[백준 파이썬] 보물 1026 문제길이가 N인 정수 배열 A와 B가 있다 다음과 같이 함수 S를 정의하자. S의 값을 가장 작게 만들기 위해 A의 수를 재배열 하자 단, B에 있는 수는 재배열하면 안 된다.S의 값이 최소가 되는 프로그램을 작성하라.입력첫째줄에 N이 주어진다.둘째 줄에는 A의 배열이 주어진다.셋째 줄에는 B의 배열의 주어진다. 출력첫째줄에 S의 최솟값을 출력한다.풀이A배열만 움직여 B배열과 곱셈을 하여 모든 값을 다 더한 값을 S이다. 이때 A배열의 인덱스만 움직여야 한다고 한다. B배열의 값들의 위치는 정해져 있고 최솟값이 되기 위해서는 B배열의 높은 값을 A배열의 가장 낮은 값을 곱셈하도록 만들어주면 가장 낮은 S값이 된다. 결론은 A 배열을 오름차순으로 정렬한고 B배열을 내림차순으로..

[백준 파이썬] 14502번 연구

[백준 파이썬] 14502번 연구문제인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 연구소의 크기는 N x M인 직사각형으로 나타낼 수 있으면 1X1 정크기의 정사각형으로 나누어져 있다.연구소는 빈칸과 벽칸으로 이루어져 있다. 바이러스는 인접한 상화좌우로 퍼져나갈 수 있다.벽을 세워서 바이러스가 퍼지는걸 막아야 하는데 세울 수 있는 벽의 개수는 3개이면 꼭 3개만 세워야 한다.이때 바이러스가 퍼지지 않은 빈칸의 개수가 최대가 되는 값을 구하여라. 입력첫줄에 연구소의 세로 N과 가로 M이 주어진다그다음줄부터 N줄에 지도의 모양이 주어진다. 0은 빈칸 1은 벽 2는 바이러가 있는 위치이다.출력첫째 줄에 얻을 수 있는 안전 영역의 최대 크기를 출력한다.풀이BFS와 백트래킹을 이용하여 문제..

[삼성 sw 파이썬] 1940. 가랏! RC카!

[삼성 sw 파이썬] 1940. 가랏! RC카!문제RC카의 이동거리를 계산하려고 한다.command가 0 이면 현재 속도 유지 , 1 이면 가속 , 2 이면 감속 해야 하면1,2, 인경우 가속도의 값이 추가로 주어진다. 만약 현재 속도보다 감속할 속도가 더 클 경우, 속도는 0 이 된다. 입력으로 n개의 command가 주어진다 각 command는 1초를 의미하면 총 n초 동안 이동한 거리를 계산하는 프로그램을 작성하면 된다. 입력첫째줄에 총 테스트 케이스의 개수 T, 다음 줄부터 각 테스트 케이스가 주어진다.테이스 케이스 첫 줄에는 command의 수 n이 주어지고 , 둘째 줄부터 , 매줄마다가 각각의 command 가 주어진다풀이현재속도 와 현재까지 이동한 거리를 저장할 변수를 선언한다.그 후 n초 ..

[백준 파이썬] 15654 N과 M(5)

[백준 파이썬] 15654N과 M(5) 문제 N개의 자연수와 자연수 M이 주어졌을대 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. -N개의 자연수 중에서 M개를 고른 수열 입력 첫째 줄에 N과 M이주언지다 둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10000보다 작거나 같은 자연수이다. 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안 되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 풀이 이 문제는 백트래킹을 이용한 문제로 백트래킹 알고리즘은 모든 경우의 수를 탐색하면서 현재 주어진 조건과 맞는 것을 선택하고 아닐 경우 ..

[백준 파이썬] 15686 치킨 배달

[백준 파이썬] 15686 치킨 배달 문제유형 브루트포스 알고리즘 백트래킹 구현 문제 크기가 N x N인 도시가 있다. 도시는 1x1 크기의 칸으로 나누어져 있다 0 2 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 2 위와 같이 입력이 주어지는데 이때 r행 c열에 위치한 지점을 (r,c)와 같은 형태로 나타낸다. r, c는 1부터 시작한다. 이때 0은 비칸, 1은 집 , 2는 치킨집이다. 자신의 집에서 가장 가까운 치킨집 과의 거리를 치킨 거리라 한다. 각각의 집은 치킨 거리를 가지고 있으며 도시의 치킨 거리는 모든 집의 치킨 거리의 합이다. 치킨 거리를 구하는 방법은 (r1, c1)과 (r2, c2) 사이의 거리는 |r1-r2| + |c1-c2|로 구한다. 치킨집 중 ..

[프로그래머스 자바] 리스트 자르기

[프로그래머스 자바] 리스트 자르기 정수n과 정수 3개가 담긴 리스트 slicer 그리고 여러 개가 담긴 리스트 num_list가 주어집니다. slicer을 차례대로 a,b,c라고할때 n에 다라 다음과 같이 num_list를 슬라이싱 할려고 한다. 슬라이싱한 리시트를 return하도록 solution 함수를 완성해주세요. 풀이 스위치 문을 이용하여 n의 값에 따라 슬라이싱 하는 방법을 나누었다. ArrayList 를 이용하여 값을 추가해주고 스위치문을 빠져나오고 난후 다시 배열로 바꿔주는 작업을 하였다 num.size(); ArrayList 의 길이를 가지고 배열을 만들어 값을 집어 넣었다. int a=num.size(); answer=new int[a]; for(int i=0; i

[백준 파이썬 소로소 집합]1043 거짓말

[백준 파이썬 소로소 집합]1043 거짓말 문제 주인공은 파티 가서 이야기하는 것을 좋아한다. 파티에 갈 때마다 자신의 이야기를 과장해서 말한다. 하지만 거짓말쟁이로 알려지기 싫어한다. 문제는 몇몇 사람들이 이야기의 진실을 알고 있다 그렇기에 진실을 알고 있는 사람들이 있을 때에는 진실을 이야기할 수밖에 없다. 당연히 어떤 사람이 어떤 파이테서는 진실을 듣고 또 다른 파티에서는 과장된 이야기들을 들었을 때도 주인공은 거짓말쟁이로 알려지게 된다. 주인공은 이런 일을 모두 피해야 한다. 사람수 n이 주어지고 진실을 아는 사람과 각 파티에 오는 사람들의 번호가 주어진다. 주인공은 모든 파티에 참가해야 한다. 과장된 이야기를 할 수 있는 파티 개수의 최댓값을 구하여라. 입력, 출력 풀이 나는 union find..

[프로그래머스 자바]가까운 1 찾기

[프로그래머스 자바] 가까운 1 찾기 문제 정수 배열 arr이 주어진다. arr은 0,1로 이루어진 배열이다. 정수 idx가 주어질때 인덱스값이 idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요. 단 그러한 인덱스가 없다면 -1을 반환합니다. 입출력 풀이 문제의 조건대로 배열 arr을 탐색하여 하고 현재 인덱스값이 idx이상일경우 인덱스값을 반환하면 된다. 나는 for문을 배열의 값으로 탐색하고 하나 탐색할 때마다 answer값을 +1을 해주면서 현재의 인덱스값을 확인하였다. 탐색하면 조건에 맞는 답이 나면 check =true 로 변경하고 반복문을 종료하였다 만약 check 값이 false 이면 우리가 원하는 조건의 답이 없다는 거니 -1을 a..

[프로그래머스 파이썬] 괄호 변환

문제 (,)으로만 이루어진 문자열이 있다 ( 와 ) 의 개수가 같다면 이를 균형잡힌 괄호 문자열이라고 한다. (,) 괄호 짝이 모두 맞을 경우에는 올바른 괄호 문자열이라고 부른다. (()))( 균현잡힌 괄호 문자열 이지만 올바른 괄호 문자열은 아니다. 아래의 규칙을 이용하여 주어진 괄호 문자열을 올바른 괄호 문자열로 바꾸어 결과값을 return 하여라. 1. 입력이 빈 문자열인 경우, 빈 문자열을 반환합니다. 2. 문자열 w를 두 "균형잡힌 괄호 문자열" u, v로 분리합니다. 단, u는 "균형잡힌 괄호 문자열"로 더 이상 분리할 수 없어야 하며, v는 빈 문자열이 될 수 있습니다. 3. 문자열 u가 "올바른 괄호 문자열" 이라면 문자열 v에 대해 1단계부터 다시 수행합니다. 3-1. 수행한 결과 문자열..

[백준 파이썬] 1644 소수의 연속합

[백준 파이썬] 1644 소수의 연속합 문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 하지만 연속된 소수의 합으로 나타낼 수 없는 자연수들도 있는데,20이 그 예이다 7+13을 하면 20이 되기는 하지만 두수는 연속된 소수가 아니기에 적합한 표현이 아니다. 한 소수는 반드시 한번만 사용할수 있다. 입력 첫째 줄에 자연수 N이 주어진다 출력 주어진 N을 연속된 소수의 합으로 나타낼 수 있는 경우의 수를 출력한다. 풀이 소수를 찾기위해 난 에스토라체 라는 알고리즘을 사용하여 소수인 경우 1의 값을 넣어 소수인걸 나중에 확인할수 있도록 하였다. 시작위치를 start=1 부터 시작하게 하여 소수이면 sum에 더하게 하여 sum이 찾는값에 도달하면 경우의수 +1 ,start +1 을 하..

반응형