본문 바로가기

알고리즘

(129)
[C++/백준] 1149 : RGB 거리 문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다. 입력 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 ..
[C++/백준] 9095 : 1, 2, 3 더하기 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. 백준 실버 3 티어. DP 문제였고 DP는 점화식을 찾는게 항상 어렵다; 1은 1로만 표현 가능. (1) 2는 1+1, 2로 표현 가능. (2) 3은 1+ (2의 경우의 수)..
[C++/백준] 1924 : 2007년 문제 오늘은 2007년 1월 1일 월요일이다. 그렇다면 2007년 x월 y일은 무슨 요일일까? 이를 알아내는 프로그램을 작성하시오. 입력 첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다. 출력 첫째 줄에 x월 y일이 무슨 요일인지에 따라 SUN, MON, TUE, WED, THU, FRI, SAT중 하나를 출력한다. 백준 열심히 해야지..... 이 문제는 날짜 요일 맞추는 구현? DP? 문제이다 사실 난이도도 쉬워서 딱히 분류의 의미도 없긴함 브론즈 1티어 문제이다 1월 입력은 따로 빼놨다가 나중에 왜 이렇게 했지...?..
[PGS] Lv.0 (코딩테스트 입문) 12일차 문제 프로그래머스 레벨 0 문자열, 정렬, 사칙연산, 수학 ✍🏻 문자열 대체 → my_string.replace(j,1,""); : 인덱스 j의 원소부터 길이 1만큼을 “”로 대체 ✍🏻 문자 내용이 숫자인지? → isdigit(c) : 숫자면 양수, 아니면 0을 리턴함 ✍🏻 vector to set → set s(v.begin(), v.end()); ✍🏻 set to vector → vector v(s.begin(), s.end()); 모음 제거 string solution(string my_string) { string m = "aeiou"; for(int i=0; i
[PGS] Lv.0 (코딩테스트 입문) 11일차 문제 프로그래머스 레벨 0 수학, 반복문 주사위의 개수 int solution(vector box, int n) { int a = box[0]/n; int b = box[1]/n; int c = box[2]/n; int answer = a*b*c; return answer; } 합성수 찾기 int solution(int n) { int answer = 0; for(int i=4; i
[PGS] Lv.0 (코딩테스트 입문) 10일차 문제 ✍🏻 벡터 numbers 와 tmp 연결하기 (합치기) → numbers.insert( numbers.end(), tmp.begin(), tmp.end() ) ✍🏻 벡터의 첫 원소 삭제하기 → v.erase( v.begin() ) 프로그래머스 레벨 0 조건문, 배열, 수학, 시뮬레이션 점의 위치 구하기 int solution(vector dot) { if(dot[0]>0 && dot[1]>0) return 1; if(dot[0]0) return 2; if(dot[0]
[알고리즘] Greedy algorithm - 이집트 나눗셈(cpp) 문제 이집트 나눗셈을 하는 프로그램을 작성하시오. 입력 p/q를 나타내는 두 정수 p, q가 사이에 공백을 하나 두고 주어진다. p는 1 이상 1,000 이하, q는 p+1 이상 2,000 이하인 정수 출력 수업 시간에 배운 이집트 나눗셈의 결과로 몇 개의 분수가 나오는지 출력한다. 예를 들어, 5/6은 1/2 + 1/3이므로 2개의 분수가 필요하다. 예제 입력 1 5 6 예제 출력 1 2 예제 입력 2 19 20 예제 출력 2 4 알고리즘 수업의 첫 과제였다. 이집트 나눗셈이란, 유리수 p/q가 주어지면 분자가 1인 분수들의 합으로 p/q를 표현하는 것이다. 예) 5/6 = 1/2 + 1/3 , 3/4 = 1/2 + 1/4 욕심쟁이 기법, 흔히 Greedy 알고리즘이라고 부르는 기법을 사용하여 풀이할 ..
[코드트리] Tree Map SW중심대학 사업단에서 CodeTree와 함께 실시한 코딩테스트 대비 캠프에 참여하여 공부한 내용을 정리하였습니다. * 참고 : python과 c++, java 등 언어별로 설명이 다른 부분 존재! 필자는 c++ 사용. map STL C++에서는 map이라는 STL을 이용할 수 있습니다. map은 TreeMap 자료구조로 되어있으며, TreeMap의 경우 균형 잡힌 이진트리 구조로 데이터들을 관리해주는 자료구조 입니다. TreeMap은 각 노드에 (key, value) 쌍 형태로 들어가 있어, key를 기준으로 노드의 위치가 결정되고 각 key에 대한 value값을 저장하는 형태입니다. 따라서 TreeMap에서 모든 함수의 시간복잡도가 전부 O(logN)입니다. #include 헤더와, map name;..

728x90