반응형

알고리즘 32

[삼성 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 을 하..

[프로그래머스 자바]문자열 뒤집기

[프로그래머스 자바]문자열 뒤집기 문제 문자열 my_string 과 정수 s,e가 매개변수로 주어질때 문자열에서 인덱스 s부터 e까지 뒤집은 문자열을 리턴하는 함수를 작성하시오. 입출력 풀이 이걸 풀기위해서는 문자열을 뒤집는 방법을 알아야한다. for문을 이용할 방법과 reverse() 를 이용한 방법이 있다. 일단 for 문을 이용한 방법은 현재 문자열을 문자배열로 받아서 s와,e사이를 스왑 하는 방법이 있고 두번째 방법은 StringBuffer / reverse()를 사용하여 그부분만 문자열을 뒤집는 방법이 있다. 내가 선택한 방법은 두번째 방법을 선택하여 주어진 문자열을 총3개의 문자열로 나누었다. 주어진 문자열을 str이라하면 ans1=str(0,s) 까지 자른거 하나 ans2=str(s,e+1)..

[백준 1806] 부분합

[백준 1806] 부분합 문제 10000 이하의 자연수로 이루어진 길이 n짜리 수열이 주어진다 이 수열에서 연속된 수들의 부분합 중에 그 합이 s 이상이 되는것 중 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오 입력 첫줄에 n과 s가 주어진다. 둘째 줄 에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분된다. 출력 첫 줄에 구하고자 하는 최소의 길이를 출력하며 만약 없으면 0을 출력한다. 풀이 투포인트를 이용하여 풀었다 합 s에 이상이 되는 부분합의 개수를 카운트할 변수로 now와 그 갯수를 넣을 리스트 ans를 만들었다 일단 기본적으로 투포인트와 같은 방식으로 진행한다 while문을 이용하여 현재까지 의 합이 도 달해 야합보다 작거나 end값이 n 보다 작을 때 sum+=data [end]하고..

반응형