"이것이 취업을 위한 코딩 테스트다 with 파이썬"

알고리즘 공부를 시작하면, 구독을 하기 시작했던 동빈나씨의 책이다.
이분은 유튜브 외에도 블로그 글로도 많은 도움을 받고있다.
포항공대 대학원에서 석사공부를 시작한다는 영상을 얼마전에 본것 같은데
책까지 쓴걸 보니 역시 대단하다~!

이분이 쓴 책이라면 이분의 유튜브나 블로그 처럼 군더더기 없는
깔끔한 설명과 소스코드까지 제공되리라 기대한다.

책 링크 : http://hanbit.co.kr/store/books/look.php?p_code=B8945183661

 

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;
}

문제는 아래 첨부 파일 참고하세요.

 

e2.pdf
0.19MB

등수의 범위를 알고자 하는 학생(x)을 기준으로, 

- 확실히 등수가 높은 학생 리스트 (아래 코드에서 up vector, x학생 포함)

- 확실히 등수가 낮은 학생 리스트 (아래 코드에서 down vector, x학생 포함)

 

아래 소스코드는 up/down vector에 학생 번호가 중복되어 있으면 삭제해서, unique(유일하게) 하는 코드 입니다.

    sort(up.begin(), up.end());
    up.erase(unique(up.begin(), up.end()), up.end());

    sort(down.begin(), down.end());
    down.erase(unique(down.begin(), down.end()), down.end());

불러오는 중입니다...

 

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, m, x;
    vector<int> up;
    vector<int> down;

    scanf_s("%d %d %d", &n, &m, &x);
    int input[1000000][2];

    for (int i = 0; i < m; i++) {
        scanf_s("%d %d", &input[i][0], &input[i][1]);
    }

    up.push_back(x);
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < up.size(); j++) {
            if (input[i][1] == up[j]) {
                up.push_back(input[i][0]);
            }
        }
    }
    down.push_back(x);
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < down.size(); j++) {
            if (input[i][0] == down[j]) {
                down.push_back(input[i][1]);
            }
        }
    }

    sort(up.begin(), up.end());
    up.erase(unique(up.begin(), up.end()), up.end());

    sort(down.begin(), down.end());
    down.erase(unique(down.begin(), down.end()), down.end());


    printf("%d %d", up.size(), n - down.size()+1);
    return 0;
}

문제는 아래 첨부 파일은 참고하세요.^^

e1.pdf
0.13MB

2019년 정올 2차 - 초등 1번 문제

#include<bits/stdc++.h>
using namespace std;

int main() {
    int i,m,n,l,c1,k=0;
    scanf("%d",&n);
    for(i=1; i<=n; i++){
        m=i;
        for(l=1000000; l>=1; l/=10){
            c1=m/l;
            m=m-c1*l;
            if(c1==3 || c1==6 || c1==9){
                printf("%d\n", i);
                k++;
                c1=0;
            }

        }
    }
    printf("%d",k);
    return 0;
}
2019 정올 2차 초등 1번 - 풀이방법 2

#include<bits/stdc++.h>
using namespace std;

int main() {
    int i,m,n,l,c1,k=0;
    scanf("%d",&n);
    for(i=1; i<=n; i++){
        m=i;
        while(m != 0){
            int mod = m%10;
            if(mod==3 || mod==6 || mod==9)k++;
            m=m/10;
        }
    }
    printf("%d",k);
    return 0;
}

정올 기출 풀이는 좀 조심스럽긴 하다....

아직 정올 기출풀이에 대해서 유료 교육 컨텐츠라고 볼 수 있을듯해서다....

처음 정올 교육을 시작한 2010년도 문제부터 최근 문제까지 나름의 문제풀이 방식을 공유해보려 한다.

 

기대하시라~!!!ㅋ

+ Recent posts