https://www.acmicpc.net/problem/15970
15970번: 화살표 그리기
직선 위에 위치를 나타내는 0, 1, 2, ...와 같은 음수가 아닌 정수들이 일정한 간격으로 오른쪽 방향으로 놓여 있다. 이러한 위치들 중 N개의 위치에 하나씩 점들이 주어진다(<그림 1>). 주어진 점들
www.acmicpc.net
#include <iostream>
#include <algorithm>
#include <cctype>
#include <cstdlib>
//백준 15970 화살표 그리기
//같은 색깔의 점 중 거리가 가장 가까운 점을 찾기
/*색깔이 다르면 색깔의 오름차순으로, 색깔이 같다면 위치를 오름차순으로 sort하고 찾는다*/
using namespace std;
struct PAIR{
int x;
int color;
};
typedef struct PAIR p;
bool cmp(p a, p b){
if(a.color != b.color){
return a.color<b.color;
}
else if(a.color == b.color){
if(a.x != b.x){
return a.x<b.x;
}
}
}
int min(int a,int b){
if(a<b){
return a;
}
else{
return b;
}
}
int main(void){
p arr[5000];
int n;
cin >> n;
for(int i = 0;i<n;i++){
cin >> arr[i].x >> arr[i].color;
}
sort(arr,arr+n,cmp);
long long sum = 0;
for(int i = 0;i<n;i++){
int Min = 200000000;
for(int j = 0;j<n;j++){
if(arr[i].color == arr[j].color && i != j){
Min = min(Min,abs(arr[i].x - arr[j].x));
}
}
sum = sum + Min;
}
cout << sum;
}
https://www.acmicpc.net/problem/5597
5597번: 과제 안 내신 분..?
X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데,
www.acmicpc.net
#include <iostream>
using namespace std;
int main(void){
bool check[30] = {false, };
for(int i = 0;i<28;i++){
int number;
cin >> number;
check[number] = true;
}
int arr[2];
int idx = 0;
for(int i = 0;i<=30;i++){
if(i == 0){
continue;
}
if(check[i] == false){
arr[idx] = i;
idx++;
}
}
if(arr[0] < arr[1]){
cout << arr[0] << '\n';
cout << arr[1];
}
else{
cout << arr[1] << '\n';
cout << arr[0];
}
}
https://www.acmicpc.net/problem/8958
8958번: OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수
www.acmicpc.net
#include <iostream>
#include <string>
using namespace std;
int main(void){
int t;
cin >> t;
while(t--){
string str;
cin >> str;
int count = 0;
int sum = 0;
for(int i = 0;i<str.size();i++){
if(str[i] == 'X'){
count = 0;
}
else{
count++;
sum = sum + count;
}
}
cout << sum << '\n';
}
}
https://www.acmicpc.net/problem/10974
10974번: 모든 순열
N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오.
www.acmicpc.net
#include <iostream>
using namespace std;
int n;
bool visited[10];
int arr[10];
void dfs(int start){
if(start == n){
for(int i = 0;i<n;i++){
cout << arr[i] << ' ';
}
cout << '\n';
return;
}
for(int i = 1;i<=n;i++){
if(visited[i] == false){
visited[i] = true;
arr[start] = i;
dfs(start+1);
visited[i] = false;
}
}
}
int main(void){
cin >> n;
dfs(0);
}
'알고리즘' 카테고리의 다른 글
2022-05-14 알고리즘 문제(백준 19941 햄버거 분배) (0) | 2022.05.14 |
---|---|
2022-05-13 알고리즘 문제 (300문제 달성 후기) (0) | 2022.05.13 |
백준 11048 이동하기 C++ (0) | 2022.05.11 |
백준 14430 자원 캐기 C++ (0) | 2022.05.09 |
22-05-08 알고리즘 문제 풀기 (0) | 2022.05.08 |