평소에 자주 애용하는 유튜브 음원추출 사이트를 만들어보기로 했다.

 

구글링을 통해 어떤 언어를 쓰는지 어떤 기술이 필요한지 알아내고자 했다.

 

한 외국 블로그에 만드는 방법이 나와있기는 했지만 expressjs를 사용해야 하고 필요한 기술들이 구체적으로 명시되지 않아서 더 찾아보기로했다.

 

지금 이용이 가능한 여러 다운로드 사이트들의 개발자들에게 메일을 보내 이를 물어보기로 했다.

 

 

----------답변 대기중-----------

 

2/19

답변을 약 1달정도 기다려봤지만 제작자들에게서 답장이 오지 않는다.

 

기존에 찾았던 방법들을 토대로 작동 원리를 파악하고 내가 사용할 수 있는 언어로 구현해보려고 한다.

Posted by hsoo3844

코드

 

#include <stdio.h>

char cross(int x, int y)
{
	if((x+y)%2 == 0){
		return '#';
	}
	else{
		return '.';
	}
}

int main(void)
{
	char c[10][10];
	char f[20][20];
	int n, m, u, l, r, d;
	scanf("%d %d", &n, &m);
	scanf("%d %d %d %d", &u, &l, &r, &d);
	for(int i = 0; i < n; i++){
		scanf("%s", c[i]);
	}
	for(int q = 0; q < n + u + d; q++){
		for(int w = 0; w < l + m + r; w++){
			f[q][w] = cross(q, w);
		}
	}
	for(int e = 0; e < n; e++){
		for(int t = 0; t < m; t++){
			f[e + u][t + l] = c[e][t];
		}
	}
	for(int a = 0; a < n + u + d; a++){
		for(int b = 0; b < l + m + r; b++){
			printf("%c", f[a][b]);
		}
		printf("\n");
	}
	return 0;
}

 

 

문제

 

창영이는 크로스워드 퍼즐을 매우 좋아한다. 세계에 존재하는 모든 크로스워드 퍼즐을 다 푼 창영이는 이제 퍼즐을 예쁘게 장식하려고 한다.

퍼즐은 총 M×N개의 글자로 이루어져 있다. 창영이는 위에 U개, 왼쪽에 L개, 오른쪽에 R개, 아래에 D개 두께로 글자를 추가해 퍼즐을 장식하려고 한다.

장식은 #와 .로 이루어져 있으며, 체스판과 같은 형태로 장식한다. 크로스워드 퍼즐을 체스판 위에 올려놓는 다고 생각을 하면 되며, 빨간 칸에 #를 채운다. 아래 예제를 참고하는 것이 좋다.

 

입력

 

첫재 줄에 M과 N이 주어진다. (1 ≤ M, N ≤ 10)

둘째 줄에 U, L, R, D (0 ≤ U, L, R, D ≤ 5)가 주어진다.

다음 M개 줄에는 크로스워드 퍼즐을 나타내는 N개의 글자가 주어진다.

 

출력

 

예쁘게 장식한 크로스워드 퍼즐을 출력한다.

 

예제 입력 1

 

4 4

2 2 2 2

honi

oker

nera

irak

 

예제 출력 1

 

#.#.#.#.

.#.#.#.#

#.honi#.

.#oker.#

#.nera#.

.#irak.#

#.#.#.#.

.#.#.#.#

 

문제 - https://www.acmicpc.net/problem/9626

Posted by hsoo3844

코드

 

#include <stdio.h>

int main(void)
{
	int k, n;
	scanf("%d", &n);
	char a[101][101];
	for(int i = 0; i < n; i++)
	{
			scanf("%s", a[i]);
	}
	scanf("%d", &k);
	if(k == 1)
	{
		for(int l = 0; l < n; l++)
		{
			printf("%s\n", a[l]);
		}
	}
	else if(k ==2)
	{
		for(int m = 0; m < n; m++)
		{
			for(int j = 0; j < n; j++)
			{
				printf("%c", a[m][n-j-1]);
			}
			printf("\n");
		}
	}
	else if(k == 3)
	{
		for(int q = 0; q < n; q++)
		{
			for(int j = 0; j < n; j++)
			{
				printf("%c", a[n-q-1][j]);
			}
			printf("\n");
		}
	}
	return 0;
}

 

문제

 

천나라 민호성의 지영 공주님은 매우 아름답다. 공주님 자신도 이 세상 그 누구보다 자신이 아름답다는 것을 알고 있다. 공주님은 자신의 아름다움이 세월의 저편으로 사라지는 것을 매우 두려워한다. 그래서 하루에도 수십 수백 번씩 거울을 보며 자신의 모습이 여전히 아름다운지 확인을 거듭한다. 그러던 어느 날, 세상의 다양한 장면들을 담고 싶었던 공주님의 마법거울은 매일 똑같은 모습만을 비추는 자신의 운명에 좌절하며 앞으로의 운명을 개척하기로 결심했다. 마법거울은 매일 자신의 심리상태에 따라 거울에 비친 공주님의 모습을 좌/우 또는 상/하로 반전시켜 비추기로 한다. 마법거울의 심리상태는 1부터 3까지의 자연수로 표현할 수 있으며, 숫자가 클수록 더 화가 난 상태를 의미한다. 마법거울의 심리상태가 1일 때는 지영 공주님의 모습을 있는 그대로 표현하고, 2일 때는 좌/우로 반전된 모습을, 3일 때는 상/하로 반전된 모습을 표현한다. 정사각형 형태의 마법거울의 크기와 거울에 비친 지영 공주님의 원래 모습, 마법거울의 심리상태가 주어졌을 때, 마법거울에 비친 지영 공주님의 모습을 출력하라.

 

입력

 

첫 번째 줄에 정사각형 모양의 마법거울의 크기를 나타내는 자연수 N(2 ≤ N ≤ 100)이 입력된다. 그 다음 N개의 줄에 걸쳐 거울에 비친 지영 공주님의 원래 모습이 각 줄에 N개의 문자로 표현된다. 마법거울은 알파벳 대소문자로만 거울에 비친 상을 표현할 수 있다. 마지막 줄에 마법거울의 심리상태를 나타내는 정수 K(1 ≤ K ≤ 3)가 주어진다.

 

출력

 

마법거울의 심리상태에 따라 거울에 비친 지영공주님의 모습을 N×N크기의 정사각형 형태로 출력하라. 반전된 모습은 입력으로 주어진 문자의 위치를 반전시키는 것을 의미한다.

 

예제 입력 1

 

8

OOOOOOOO

OKKOOEEO

OKKOOEEO

OOOSSOOO

OOOSSOOO

OAOOOOAO

OOAAAAOO

OOOOOOOO

3

 

예제 출력 1

 

OOOOOOOO

OOAAAAOO

OAOOOOAO

OOOSSOOO

OOOSSOOO

OKKOOEEO

OKKOOEEO

OOOOOOOO

 

문제 - https://www.acmicpc.net/problem/11586

Posted by hsoo3844

코드

 

#include <stdio.h>

int main(void)
{
	char array[5][15];
	for(int i = 0; i < 5; i++){
		for(int j = 0; j < 15; j++){
			array[i][j] = 0;
		}
	}
	for(int i = 0; i < 5; i++){
		scanf("%s", array[i]);
	}
	for(int j = 0; j < 15; j++){
		for(int  k = 0; k < 5; k++){
			if(array[k][j] != '\0'){
			printf("%c", array[k][j]);
			}
		}
	}
	return 0;
}

 

문제

 

아직 글을 모르는 영석이가 벽에 걸린 칠판에 자석이 붙어있는 글자들을 붙이는 장난감을 가지고 놀고 있다. 

이 장난감에 있는 글자들은 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’이다. 영석이는 칠판에 글자들을 수평으로 일렬로 붙여서 단어를 만든다. 다시 그 아래쪽에 글자들을 붙여서 또 다른 단어를 만든다. 이런 식으로 다섯 개의 단어를 만든다. 아래 그림 1은 영석이가 칠판에 붙여 만든 단어들의 예이다. 

A A B C D D

a f z z

0 9 1 2 1

a 8 E W g 6

P 5 h 3 k x

<그림 1>

한 줄의 단어는 글자들을 빈칸 없이 연속으로 나열해서 최대 15개의 글자들로 이루어진다. 또한 만들어진 다섯 개의 단어들의 글자 개수는 서로 다를 수 있다. 

심심해진 영석이는 칠판에 만들어진 다섯 개의 단어를 세로로 읽으려 한다. 세로로 읽을 때, 각 단어의 첫 번째 글자들을 위에서 아래로 세로로 읽는다. 다음에 두 번째 글자들을 세로로 읽는다. 이런 식으로 왼쪽에서 오른쪽으로 한 자리씩 이동 하면서 동일한 자리의 글자들을 세로로 읽어 나간다. 위의 그림 1의 다섯 번째 자리를 보면 두 번째 줄의 다섯 번째 자리의 글자는 없다. 이런 경우처럼 세로로 읽을 때 해당 자리의 글자가 없으면, 읽지 않고 그 다음 글자를 계속 읽는다. 그림 1의 다섯 번째 자리를 세로로 읽으면 D1gk로 읽는다. 

그림 1에서 영석이가 세로로 읽은 순서대로 글자들을 공백 없이 출력하면 다음과 같다:

Aa0aPAf985Bz1EhCz2W3D1gkD6x

칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오.

 

입력

 

총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’ 중 하나이다. 각 줄의 시작과 마지막에 빈칸은 없다.

 

출력

 

영석이가 세로로 읽은 순서대로 글자들을 출력한다. 이때, 글자들을 공백 없이 연속해서 출력한다. 

 

예제 입력 1

 

ABCDE

abcde

01234

FGHIJ

fghij

 

예제 출력 1

 

Aa0FfBb1GgCc2HhDd3IiEe4Jj

 

예제 입력 2

 

AABCDD

afzz

09121

a8EWg6

P5h3kx

 

예제 출력 2

 

Aa0aPAf985Bz1EhCz2W3D1gkD6x

 

문제 - https://www.acmicpc.net/problem/10798

Posted by hsoo3844

코드

 

#include <stdio.h>

int main(void)
{
	int a[100][100];
	int b[100][100];
	int n,m;
	scanf("%d %d", &n, &m);
	for(int i = 0; i < n; i++)
	{
		for(int j = 0; j < m; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	for(int k = 0; k < n; k++)
	{
		for(int l = 0; l < m; l++)
		{
			scanf("%d", &b[k][l]);
		}
	}
	for(int q = 0; q < n; q++)
	{
		for(int w = 0; w < m; w++)
		{
			a[q][w] += b[q][w];
			printf("%d ", a[q][w]);
		}
		printf("\n");
	}
	return 0;
}

 

문제

 

N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.

 

입력

 

첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.

 

출력

 

첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.

 

예제 입력 1

 

3 3

1 1 1

2 2 2

0 1 0

3 3 3

4 4 4

5 5 100

 

예제 출력 1

 

4 4 4

6 6 6

5 6 100

 

문제 - https://www.acmicpc.net/problem/2738

Posted by hsoo3844

코드

 

#include <stdio.h>

int main(void)
{
	int loop;
	int cnt = 0;
	char name[30];
	int first[26] = {0,};
	scanf("%d", &loop);
	for(int i = 0; i < loop; i++){
		scanf("%s", name);
		first[name[0] -97]++;
	}
	for(int j = 0; j < 26; j++){
		if(first[j] >= 5){
			printf("%c", j + 97);
			cnt++;
		}
	}
	if(cnt == 0){
		printf("PREDAJA");
	}
	return 0;
}

 

문제

 

상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작했다. 상근이도 농구장을 청소하면서 감독이 되기 위해 가져야할 능력을 공부해나갔다. 서당개 3년이면 풍월을 읊듯이 상근이는 점점 감독으로 한 걸음 다가가고 있었다. 어느 날 그에게 지방의 한 프로농구팀을 감독할 기회가 생기게 되었다. 그는 엄청난 지도력을 보여주며 프로 리그에서 우승을 했고, 이제 국가대표팀의 감독이 되었다.

내일은 일본과 국가대표 친선 경기가 있는 날이다. 상근이는 내일 경기에 나설 선발 명단을 작성해야 한다.

국가대표팀의 감독이 된 이후에 상근이는 매우 게을러졌다. 그는 선수의 이름을 기억하지 못하고, 각 선수의 능력도 알지 못한다. 따라서, 누가 선발인지 기억하기 쉽게 하기 위해 성의 첫 글자가 같은 선수 5명을 선발하려고 한다. 만약, 성의 첫 글자가 같은 선수가 5명보다 적다면, 상근이는 내일 있을 친선 경기를 기권하려고 한다.

상근이는 내일 경기를 위해 뽑을 수 있는 성의 첫 글자를 모두 구해보려고 한다.

 

입력

 

첫째 줄에 선수의 수 N (1 ≤ N ≤ 150)이 주어진다. 다음 N개 줄에는 각 선수의 성이 주어진다. (성은 알파벳 소문자로만 이루어져 있고, 최대 30글자이다)

 

출력

 

상근이가 선수 다섯 명을 선발할 수 없는 경우에는 "PREDAJA" (따옴표 없이)를 출력한다. PREDAJA는 크로아티아어로 항복을 의미한다. 선발할 수 있는 경우에는 가능한 성의 첫 글자를 사전순으로 공백없이 모두 출력한다.

 

예제 입력 1

 

18

babic

keksic

boric

bukic

sarmic

balic

kruzic

hrenovkic

beslic

boksic

krafnic

pecivic

klavirkovic

kukumaric

sunkic

kolacic

kovacic

prijestolonasljednikovi

 

예제 출력 1

 

bk

 

문제 - https://www.acmicpc.net/problem/1159

Posted by hsoo3844
이전버튼 1 2 3 이전버튼