문제 

https://www.acmicpc.net/problem/1436

 

1436번: 영화감독 숌

666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타

www.acmicpc.net

풀이

숫자를 문자열로 변환하는 to_string  +  BruthForce 문제였다. 문자열과 숫자를 같이 생각해주면서 1씩 증가해보면서 모든 case를 판단해주면 된다.  문자열 변환을 해주지 않는다면 시간 초과가 날것이다.

 

 

코드 

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int N;
int main() {
	cin >> N;
	int result = 0;
	int K = 666;
	while (1) {
		string target=to_string(K);

		for (int i = 0; i < target.size(); i++) {
			if (target[i] == '6' && target[i + 1] == '6' && target[i + 2] == '6') {
				result++;
				break;

			}
			
		}
		if (result == N) break;
		K++;
	}

	cout << K;



	return 0;
}

'알고리즘 공부 > 백준' 카테고리의 다른 글

[백준] 나무 자르기 (2805/C++)  (0) 2022.01.16
[백준] 블랙잭 (2798 / C++)  (0) 2022.01.16
[백준] 랜선자르기 (1654 / C++)  (0) 2022.01.11
[백준] 스택 수열(1874/C++)  (0) 2022.01.09
[백준] 단어정렬 (C++/1181)  (0) 2021.12.19

문제

https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

 

풀이

이분 탐색을 바로 생각해내야만 하는 문제였다. 이분 탐색 기본 유형

조건을 만족하면서(Possible) 조건 내 최댓값을 이분 탐색을 통해 찾아내야 한다.

 

이분 탐색시 랜선길이 개수를 보면 2^32-1 이다. 이를 전부 탐색하려면 이분탐색 방법뿐만 아니라 자료형 또한

long long 이 필요함을 잊지 말자. 

 

코드

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int N; //필요한 랜선 개수
int K; //보유한 랜선 개수
vector<long long> kk; //랜선길이개수가 2^32-1 보다 작거나 같은 자연수이므로 longlong 선언
bool Possible(int mid) {
	long long cnt = 0;
	for (int i = 0; i < K; i++) {

		cnt += kk[i] / mid;

	}
	if (cnt >= N) {
    
		return true;
	}
	return false;

}
int main() {
	cin >> K >> N;
	//항상 K <= N

	for (int i = 0; i < K; i++) {
		int a; 
		cin >> a;
		kk.push_back(a);
	}

	//이분탐색
	long long low = 1;
	long long result = 0;
	//high찾기
	long long high = 0;
	for (int i = 0; i < K; i++) {
		
		high = max(kk[i], high);

	}

	while (low <= high) {
		long long mid = (high + low) / 2;
		if (Possible(mid)) {

			if (result < mid)  result = mid;

			low = mid + 1;
		
		}
		else {
			high = mid - 1;
		}

	}

	cout << result;

	return 0; 
}

'알고리즘 공부 > 백준' 카테고리의 다른 글

[백준] 블랙잭 (2798 / C++)  (0) 2022.01.16
[백준] 영화감독 숌 (1436 / C++)  (0) 2022.01.13
[백준] 스택 수열(1874/C++)  (0) 2022.01.09
[백준] 단어정렬 (C++/1181)  (0) 2021.12.19
[백준] 보물섬 (2589/C++)  (0) 2021.08.22

문제

https://www.acmicpc.net/problem/1874

 

1874번: 스택 수열

1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.

www.acmicpc.net

 

풀이

스택을 안 쓰고, NO과정을 생각하다가 괜히 복잡하게 풀고 있었다. 그냥 스택 생성 후 , cnt 변수를 지정해서 스택 쌓고, 빼고 하면 되는 간단한 문제였다. 

 

이런 쉬운문제는 쉽고 빠르게 푸는 연습이 코딩 테스트에서 더 중요하다고 생각한다....

 

 

코드

#include<iostream>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
int N;
vector<char> result;
int main() {
	cin >> N;
	stack<int> st; //스택만들어서 되는지 안되는지 확인
	bool flag = false;
	int cnt = 1; // 스택 1부터 시작


	for (int i = 0; i < N; i++) {
		int a;
		cin >> a;		

		while (cnt <= a) { // 지정된 수 까지 cnt 쌓기 
			st.push(cnt); 
			cnt++;
			result.push_back('+');
		}
		if (st.top() == a) {
			st.pop();
			result.push_back('-');

		}
		else {

			flag = true;
			break;
		}

	}
	if (flag == true) cout << "NO" << endl;
	else {
		for (int k = 0; k < result.size(); k++) {
			cout << result[k] << '\n';

		}
	}




	return 0;
}

'알고리즘 공부 > 백준' 카테고리의 다른 글

[백준] 영화감독 숌 (1436 / C++)  (0) 2022.01.13
[백준] 랜선자르기 (1654 / C++)  (0) 2022.01.11
[백준] 단어정렬 (C++/1181)  (0) 2021.12.19
[백준] 보물섬 (2589/C++)  (0) 2021.08.22
[백준] DFS와 BFS (1260/C++)  (0) 2021.08.19

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

코드 설명

sort 연습 및 이중조건시 해결법에 대해 다시 복습할 수 있는 문제였다. 

(+추가로 중복제거도 까먹지말자)

 

 

코드 

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int N;
vector<string> arr;

bool cmp(string a, string b) {
	if (a.size() == b.size()) {

		return a < b;
	}

	return a.size() < b.size();

}

int main() {
	cin >> N;
	for (int i = 0; i < N; i++) {
		string abc;
		cin >> abc;
		arr.push_back(abc);



	}
	sort(arr.begin(), arr.end(),cmp);
	arr.erase(unique(arr.begin(), arr.end()), arr.end());

	for (int i = 0; i < arr.size(); i++) {
		cout << arr[i] << endl;

	}

	return 0;
}

'알고리즘 공부 > 백준' 카테고리의 다른 글

[백준] 랜선자르기 (1654 / C++)  (0) 2022.01.11
[백준] 스택 수열(1874/C++)  (0) 2022.01.09
[백준] 보물섬 (2589/C++)  (0) 2021.08.22
[백준] DFS와 BFS (1260/C++)  (0) 2021.08.19
[백준] 욕심쟁이 판다 (1937/C++)  (0) 2021.08.17

+ Recent posts