본문 바로가기

CodingTest/BOJ

(27)
[BOJ 17608] 백준 막대기 풀이 - C++ 사용언어 : C++ 문제풀이 * 스택 이용! (1) 입력 값들을 순서대로 스택에 저장 stack stck; cin >> N; for (int i = 0; i > tmp; stck.push(tmp); } (2) 스택 순서대로 현재 최대 높이와 비교한다 (현재 높이보다 크면 answer값 +1 해주고, 최대높이(cnt)값도 업데이트 해준다) (그렇지 않으면 스택 pop만 해준다) int cnt = 0; //현재 최대 높이 while (!stck.empty()) { if (stck.top() > cnt) { answer++; cnt = stck.top(); } stck.pop(); } 전체코드 #include using namespace std; #include int N; in..
[BOJ 1874] 백준 스택 수열 풀이 - C++ 사용언어 : C++ 문제풀이 - 배열에 우선 입력값을 저장한다 - stack을 이용해 배열과 동일한 수열을 만들 수 있는지 판별한다 -(+,-는 vector값에 차례로 대입 : push할 땐 +, pop할 땐 -) - 마지막까지 stack에 값이 남아있으면 수열을 만들 수 없음. 비어있을 땐 vector값 차례로 출력 (1) 배열에 입력 값 차례대로 대입 cin >> n; for (int i = 0; i > a[i]; (2) stack 을 이용해 판별하기 for (int i = 1; i a[i]; for (int i = 1; i
[BOJ 1541] 백준 잃어버린 괄호 풀이 - C++ 사용언어 : C++ 문제풀이 (1) 55 - 50 + 40 => 55 - (50+40) = -35 (2) 40+20 - 60+30 => 40+20 - (60+30) = -30 (3) 40-20+30+30 => 40 - (20+30+30) = -40 => '-' 빼기 연산자가 나오면 그 뒤 연산식을 괄호로 묶는다. => 즉, - 연산자가 하나라도 나오면 그 뒤의 피연산자들은 빼기 연산을 진행한다 * 변수 설정 string order; //입력 받는 식 vector operands; // 숫자 저장 string tmp; //숫자 값 임의로 저장 int plus_cnt=0; //더하기 몇 번 해야하는지 bool minus_flag = false; //- 연산자 나왔는지 (1) 연산자, 피연산자 구분하기 (피연..
[BOJ 2869] 백준 달팽이는 올라가고 싶다 풀이 - c++ 사용언어 : C++ 문제풀이 * 하루에 이동한 최종 거리 (A-B)m * x일동안 이동한 최종 거리 (A-B)*x * x일동안 이동한 거리가 Vm보다 큰 최솟값 == 도착하는 데까지 걸리는 일수 (A-B)*x >= V * 이 때, 정상에 올라간 후에는 미끄러지지 않는다. 즉, 마지막날엔 밤을 보내지 않는다 (A-B)*(x-1)+A>=V X를 기준으로 식 정리하기 X>=((V-A)/(A-B))+1 (이때 정수인 X는 계산값과 같거나 큰 정수의 최솟값이 된다. ceil 함수 이용. V,A,B는 실수형으로 적용) 전체코드 #include #include using namespace std; double A, B, V; int result; int main() { cin >> A >> B >> V; result..
[BOJ 1193] 백준 분수찾기 풀이 - C++ 사용언어 : C++ 문제풀이 (1/1), (1/2,2/1), (3/1,2/2,1/3) , (1/4,2/3,3/2,4/1) ... 대각선을 기준으로 각 분수들은 분자 분모의 합이 동일하다. 1+1=2, 1+2=3, 2+1=3, 3+1=4, 2+2=4, 1+3=4, 그리고 대각선 별 각 분수들의 갯수는 하나씩 증가한다 (1/1 1개, 1/2 2/1 2개, 3/1 2/2 1/3 3개) * 지역변수 x는 (1)대각선 분수들의 갯수이면서 (2)분자분모의 합이 된다. (여기서 (1)과 (2)는 값이 1만큼 차이나는데 분수값을 출력할 때 cnt+1로 계산해준다) (1) 입력 값 x 순서 분수의 분자 분모 합이 얼마인지 계산하기 cin >> x; int cnt = 1; //갯수가 한개(1/1)부터 시작 while (x..
[BOJ 10816] 백준 숫자 카드 2 풀이 - C++ 사용언어 : C++ 1. 이진탐색, 2. 맵 문제풀이 * binary search(이진탐색) 사용 숫자카드 값을 오름차순으로 정렬 후 해당 value값의 최소index,최대index를 구해 둘의 차이를 구한다. 1. 숫자 카드 값 배열에 대입하고 오름차순으로 정렬 cin >> N; for (int i = 0; i > arr[i]; } int start; int end; int center; sort(arr, arr + N); 2. 최소 index, 최대 index 구하는 함수를 이용해 두 index의 차 구하기 int start; int end; int center; sort(arr, arr + N); //오름차순으로 정렬 cin >> M; for (int j = 0; j ..
[BOJ 1654] 백준 랜선 자르기 풀이 - C++ 사용언어 : C++ 문제풀이 * binary search(이진탐색) 사용 (1) for문으로 arr배열에 랜선길이 대입하기 (동시에 랜선 최대값 구하기) int max_num = 0; for (int i = 0; i > arr[i]; if (arr[i] > max_num) max_num = arr[i]; } (2) while문(이진탐색)으로 최대 랜선 길이 구하기 (N개와 비교) int max_length = 0; while (start max_length) max_length = center; } } 전체코드 #include using namespace std; #include int K, N; int arr[10000]; int main() { cin >> K >> N;..
[BOJ 1920] 백준 수 찾기 풀이 - C++ 사용언어 : C++ 문제풀이 * binary search(이진탐색) 사용 - 전역변수 int N, M; int tmp; int A[100000]; -main함수 int main() { ios::sync_with_stdio(false); cin.tie(0); // 위에 두개 작성해야 시간초과 안난다 //N만큼 A배열에 값 저장하기 cin >> N; for (int i = 0; i > A[i]; } //이진탐색을 사용하기 위해 오름차순으로 정렬 sort(A, A + N); //M만큼 값 존재유무 확인하기 cin >> M; for (int i = 0; i > tmp; cout > N; for (int i = 0; i >..