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

 

17619번: 개구리 점프

첫 번째 줄에 통나무 개수 N과 질문의 개수 Q가 주어진다. 다음 N개의 줄에 각 통나무에 x1, x2, y의 세 정수 좌표가 주어진다. 주어진 통나무는 두 점 (x1, y)와 (x2, y)를 잇는 형태이다. (x1 < x2) 모든 좌표는 0이상 109이하이다. 통나무들은 주어진 순서대로 1번부터 번호가 붙어 있다. 서로 다른 두 통나무는 (끝점에서도) 만나지 않는다. 다음 Q개의 줄에 서로 다른 두 통나무의 번호가 주어진다. (1 ≤ N ≤ 100,00

www.acmicpc.net

 

 

 

#include<bits/stdc++.h>

using namespace std;

typedef struct wood
{
	int x1, x2, y;
	int num;
}wd;


bool cmp(wd a, wd b)
{
	return a.x1 < b.x1;
}

int main(void)
{
	int n,q;
	int qus_1, qus_2;
	int now_group = 1;
	int group[100] = {0,};
	int max_x2=0;
	scanf("%d %d", &n, &q);

	vector<wd> v;
	wd temp;

	for(int i=1; i<=n; i++)	//입력.
	{
		temp.num = i;
		scanf("%d %d %d", &temp.x1, &temp.x2, &temp.y);
		v.push_back(temp);
	}

	sort(v.begin(), v.end(), cmp);	//x1의 순서로 정렬.

	for(int i=0; i<n; i++)
	{
	    group[v[i].num] = now_group;
        max_x2=v[i].x2;

        if(i==n-1)
        {
            break;
        }

        for(int j = i+1; max_x2>=v[j].x1; j++)
        {
            printf("=1.1= %d : %d\n", max_x2, v[j].x1);
            if(v[j].x2 > max_x2)
            {
                max_x2 = v[j].x2;
            }

            group[v[j].num] = now_group;
            i++;
            printf("=1.2= %d : %d\n", max_x2, v[j].x1);
        }
        now_group++;
	}



	for(int i = 0; i<=n; i++)
	{
		printf("=2=%d : %d\n", i, group[i]);
	}

	for(int i=0; i<q; i++)
	{
		scanf("%d %d", &qus_1, &qus_2);
		if(group[qus_1] == group[qus_2])	//같은 그룹이면 연결되어있다.
		{
			printf("1\n");
		}
		else
		{
			printf("0\n");
		}
	}

	return 0;
}

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=246&sca=10f0

 

JUNGOL | 문자열2 - 자가진단8 > 문제은행

세 개의 단어를 입력받아 아스키코드(사전) 순으로 가장 먼저 나오는 단어를 출력하는 프로그램을 작성하시오. 각 단어의 길이는 1이상 10 이하이다.

www.jungol.co.kr

 

 

#include<bits/stdc++.h>
using namespace std;
/*
609 : 문자열2 - 자가진단8
세 개의 단어를 입력받아 아스키코드(사전) 순으로 가장 먼저 나오는 단어를 출력하는 프로그램을 작성하시오.
각 단어의 길이는 1이상 10 이하이다.
입력 예
cat dog cow
출력 예
cat
*/

int main()
{
    vector<string> v;
    char a[104][104];
    int i,k=0;
    for(i=0; i<3; i++){
        string st;
        cin >> st;
        v.push_back(st);
    }

    for(i=0; i<v.size(); i++){
        if(v[i] < v[k]){
            k=i;
        }
    }
    cout << v[k];

    sort(v.begin(),v.end());
    cout << v[0];
	return 0;
}

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=247&sca=10f0

 

JUNGOL | 문자열2 - 자가진단9 > 문제은행

5개의 문자열을 입력받아 문자열 크기(아스키코드) 역순으로 정렬하여 출력하는 프로그램을 작성하시오. 주어지는 문자열의 길이는 20자 미만이다.

www.jungol.co.kr

 

#include<bits/stdc++.h>
using namespace std;
/*
610 : 문자열2 - 자가진단9
5개의 문자열을 입력받아 문자열 크기(아스키코드) 역순으로 정렬하여 출력하는 프로그램을 작성하시오.
주어지는 문자열의 길이는 20자 미만이다.
입력 예
Jungol
Korea
information
Monitor
class
출력 예
information
class
Monitor
Korea
Jungol
*/

int main()
{
    int i,j;
    char t[104],a[104][104];
    for(i=0; i<5; i++){
        scanf("%s",a[i]);
    }
    //sort(a,a+5);

    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            if(strcmp(a[i],a[j])>0){
                strcpy(t,a[i]);
                strcpy(a[i],a[j]);
                strcpy(a[j],t);
            }
        }
    }

    for(i=0; i<5; i++){
        printf("%s\n",a[i]);
    }
	return 0;
}

 

 

#include<bits/stdc++.h>
using namespace std;
/*
610 : 문자열2 - 자가진단9
5개의 문자열을 입력받아 문자열 크기(아스키코드) 역순으로 정렬하여 출력하는 프로그램을 작성하시오.
주어지는 문자열의 길이는 20자 미만이다.
입력 예
Jungol
Korea
information
Monitor
class
출력 예
information
class
Monitor
Korea
Jungol
*/
bool com(string a, string b)
{
    return a>b;
}
int main()
{
    int i,j;
    vector <string> v;
    char t[104],a[104][104];
    for(i=0; i<5; i++){
        cin >> a[i];
        string s(a[i]);
        v.push_back(s);
    }

    sort(v.begin(),v.end(),com);

    for(i=0; i<5; i++){
        cout << v[i] << "\n" ;
    }

	return 0;
}

http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=227&sca=10d0

 

JUNGOL | 함수3 - 자가진단4 > 문제은행

경기도 안양시 동안구 평촌대로 109 협성골드프라자 601호 TEL : 031-360-4144 FAX : 031-388-0996 E-mail : hancomc@hotmail.com, comkiwer@naver.com Copyrightⓒ 2010-2019 jungol. All right reserved. TOP

www.jungol.co.kr

 

#include<bits/stdc++.h>
using namespace std;
vector<int> v;
void f(int n, int c)
{
	int i;
	if(v.size()==n){
		for(i=0; i<n; i++){
			printf("%d ",v[i]);
		}
		printf("\n");
		return;
	}
	for(i=c; i<=6; i++){
		v.push_back(i);
		f(n,i);
		v.pop_back();
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	f(n,1);
	return 0;
}

'정보올림피아드-KOI > 기초 문법 문제' 카테고리의 다른 글

234 : 함수3 - 형성평가4  (0) 2020.03.01
589 : 함수3 - 자가진단3  (0) 2020.02.16
591 : 함수3 - 자가진단5  (0) 2020.02.16
598 : 문자열1 - 자가진단6  (0) 2020.02.16
231 : 함수3 - 형성평가1  (0) 2020.02.16

 

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

www.acmicpc.net

1. 단계 : 시작 정점을 방문했다고 표시하고, Queue에 push

void bfs(int start){
    checked[start]=1;
    queue<int> q;
    q.push(start);
    while(!q.emplace()){
        
    }
}

2. 단계 
시작 정점을 방문했다고 표시하고, Queue에 push
Queue가 빌때까지 반복하면서, queue의 front값을 받고, pop함

void bfs(int start){
    checked[start]=1;
    queue<int> q;
    q.push(start);
    while(!q.empty()){
        int current = q.front();
        q.pop();
        printf("%d ", current);
    }
}

3. 단계
시작 정점을 방문했다고 표시하고, Queue에 push
Queue가 빌때까지 반복하면서, queue의 front값을 받고, pop함

queue의 front 정점(current)을 대상으로 연결된 정점(next)들을 찾음
next중에 방문하지 않은 정점이면, 방문 표시하고 queue에 push
이것을 queue가 빌때까지 반복

void bfs(int start){
    checked[start]=1;
    queue<int> q;
    q.push(start);
    while(!q.empty()){
        int current = q.front();
        q.pop();
        printf("%d ", current);
        for(int i=0; i<vxy[current].size(); i++){
            int next=vxy[current][i];
            if(checked[next] == 0){
                q.push(next);
                checked[next]=1;
            }
        }
    }
}

 

 

전체 소스코드

#include <bits/stdc++.h>
using namespace std;
int checked[10000];
vector<int>vxy[10000];

void dfs(int start)
{
    checked[start]=1;
    printf("%d ",start);
    for(int i=0; i<vxy[start].size(); i++){
        int next=vxy[start][i];
        if(checked[next] == 0){
            dfs(next);
        }
    }
}

void bfs(int start){
    checked[start]=1;
    queue<int> q;
    q.push(start);
    while(!q.empty()){
        int current = q.front();
        q.pop();
        printf("%d ", current);
        for(int i=0; i<vxy[current].size(); i++){
            int next=vxy[current][i];
            if(checked[next] == 0){
                q.push(next);
                checked[next]=1;
            }
        }
    }
}

int main() {
    int a,b,c,n,m,i;
    scanf("%d %d %d",&n,&m,&c);
    for(i=1; i<=m; i++){
        scanf("%d %d",&a,&b);
        vxy[a].push_back(b);
        vxy[b].push_back(a);
    }

    for(i=1; i<=n; i++){
        sort(vxy[i].begin(),vxy[i].end());
    }

    dfs(c);
    for(i=0; i<=n; i++)checked[i]=0;
    printf("\n");
    bfs(c);

    return 0;
}

'정보올림피아드-KOI > BOJ' 카테고리의 다른 글

백준-N-Queen : 3344번  (0) 2019.12.26
백준 - 타일링 : 1793번  (0) 2019.12.23
백준 - N과 M (4) :15652 번  (0) 2019.12.19
백준 - N과 M (3) : 15651번  (0) 2019.12.19
백준 - A/B : 1008번  (0) 2019.12.19

+ Recent posts