'프로그래밍' 태그의 글 목록 (4 Page) :: 잡다한 프로그래밍
반응형

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


1. 해결방법

어떤 방법으로 해결을 할 수 있을지 몰라서 결국 문제를 찾았다 DFS를 활용한 백트래킹 방법으로 이를 해결하는 방법이 가장 일반화 되어있었고, DFS에서 가지치기를 하는방법이다.


2. 에러사항

가지치기를 하는 부분에서 예를들어 1행 1열에 체스가 놓여져 있다고 하면 2행에는 1행에놓여진 열, 열-1, 열+1 이 세가지를 피하면 해결 될 것이라고 생각했으나 이는 대각선을 처리하는 부분에 문제가 있었다. 대각선을 처리하는법은 행끼리의 차이와 열끼리의 차이가 같으면 대각선으로 판단하는 방법으로 해결했다.


3. 코드

#include <iostream>
#include <string.h>
#include <cmath>
using namespace std;

int total;
int num;
int col[15];
int cnt;

bool check(int val) {

	for (int i = 1; i < val; i++) {
		if (col[i] == col[val]) {
			return false;
		}
		if (abs(val - i) == abs(col[val] - col[i])) {
			return false;
		}
	}

	return true;
}

void dfs(int row, int co) {

	if (row == num) {
		cnt++;
	}
	else {
		for (int i = 1; i <= num; i++) {
			col[row + 1] = i;
			if (check(row + 1)) {
				dfs(row + 1, i);
			}
			else {
				col[row + 1] = 0;
			}
		}
	}
	col[row] = 0;
}

int main()
{
	scanf("%d", &total);
	for (int i = 0; i < total; i++) {
		memset(col, 0, sizeof(col));
		cnt = 0;
		scanf("%d", &num);
		for (int j = 1; j <= num; j++) {
			col[1] = j;
			dfs(1, j);
		}
		cout << "#" << i+1 << " " << cnt << endl;
	}
}
반응형
반응형
링크

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


1. 해결방법

처음에 for문을 2번 돌려서 해결하려 했지만 오류가 있었고 다른 분의 코드를 참고하였다

점수가 3가지가 입력되었다면 1번부터 가능한 모든 점수를 구하고, 다음번에 2번째 점수를 1번째 경우에 수에 모두 더하고,,,, 이런 방식으로 해결하였다


2. 코드

#include <iostream>
#include <stdio.h>
#include<string.h>
using namespace std;
 
int total = 0;
int num = 0;
int ary[100];
int result[10001];
int temp;
int cnt;
 
int main()
{
    scanf("%d", &total);
    for (int i = 0; i < total; i++) {
        memset(result, 0, sizeof(result));
        memset(ary, 0, sizeof(ary));
        result[0] = 1;
        cnt = 0; temp = 0;
         
    scanf("%d", &num);
        for (int j = 0; j < num; j++) {
        scanf("%d", &ary[j]);
            temp += ary[j];
            for (int n = temp; n >= 0; n--) {
                if (result[n]) {
                    result[n + ary[j]]++;
                }
            }
                        result[ary[j]]++;
        }
        for (int i = 0; i < 10001; i++) {
            if (result[i] > 0)
                cnt++;
        }
 
        printf("#%d %d\n", i+1, cnt);
    }
    return 0;
}
반응형
반응형

1. Express란?

 


2. 설치방법

sudo npm install express -g

express app

3. 구조

/myapp
 ⌊ /bin
     ⌊ www
 ⌊ /public
     ⌊ /images
     ⌊ /javascripts
     ⌊ /stylesheets
 ⌊ /routes
     ⌊ index.js
     ⌊ users.js
 ⌊ /views
     ⌊ index.jade
 ⌊ app.js
 ⌊ package.json

/bin/www : 실제 node.js 웹 서버를 실행하는 부분(Port설정 및 서버 실행 부분)

 

/public : 공유자원을 이용할때 사용하거나, 정적 파일을 위한 폴더. Images, Javascripts, stylesheets가 있다.

쉽게 이야기하여 서버에서 자원을 이용할 때 이 폴더를 이용한다.

 

/routes : 라우팅을 위한 폴더. 사용자의 접근을 어떻게 처리할지 적혀 있는 부분.

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) { //사용자가 /이라는 URL로 접근했을 때
res.render('index', { title: 'Express' });
});
module.exports = router;
  • req : 클라이언트의 request를 담고 있다.
  • res : request가 온 클라이언트로 response 하는 객체이다.

/views : 사용자가 바라보는 웹 View가 들어있는 폴더이다 기본으로는 index.Jade가 있으며 ejs, pug, html 등 자유롭게 사용할 수 있다.

 

app.js : 웹 서버에 필요한 설정이 담겨있는 파일이다. 핵심적인 파일으로서 사용자가 사용할 미들웨어들이 포함되어 있거나 public, route 등의 설정이 담겨있다. 서버는 app.js를 바라보고 설정을 연동한다.

 

package.json : express에 설치된 모듈의 정보, 프로그램의 이름, 버전 등 express에 관한 정보를 기록한다. 설치된 모듈의 정보가 package.json에 저장되어 있어 사용자가 다시 설치할 때는 npm install을 입력하게 되면 기술된 모듈의 정보로 자동 설치한다.


4. 실행

sudo npm install

sudo npm start

npm start 이후 http://localhost:3000으로 접속한다. 이때 3000이라는 포트번호를 바꾸고 싶을 경우 www파일을 수정하면 된다. 아래와 같은 화면이 실행되면 제대로 설치된 것이다.

 

반응형
반응형
링크

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

1. 해결방법


1. 첫번째 생각으로 bfs를 이용하여 각 위치를 들리며 최소 시간을 구하는 방법을 사용하였다

하지만 bfs방법은 시간이 너무 오래걸려 문제의 시간을 초과해버려서 다른방법을 생각해보아야했다.

 

2. bfs를 사용하는 방법이지만 queue를 사용하였고 또한 cin, cout 대신 scanf와 printf를 사용하였다 cin과 cout보다 scanf와 printf가 속도가 더 빠르다고 하여 사용하여 시간을 단축하였다.


2. 코드

1. bfs방법(실패)

#include <iostream>
using namespace std;
int total = 0;
int num = 0;
int ary[100][100] = {};
int temp = 9999;
bool bo[100][100] = { false };
int sum = 0;
int nx[4] = { 0, 0, -1, 1 };
int ny[4] = { -1, 1, 0, 0 };

void dfs(int x, int y, int val) {
	bo[x][y] = true;

	if (x == num - 1 && y == num - 1) {
		if (temp > val) {
			temp = val;
			bo[x][y] = false;
			return;
		}
	}
	else {
		for (int i = 0; i < 4; i++) {
			int dx = x + nx[i];
			int dy = y + ny[i];

			if (dx < 0 || dx >= num || dy < 0 || dy >= num || bo[dx][dy] == true) continue;
			dfs(dx, dy, val + ary[dx][dy]);
			bo[dx][dy] = false;
		}
	}

}

int main()
{
	scanf("%1d", &total);
	for (int i = 0; i < total; i++) {

		scanf("%1d", &num);
		for (int j = 0; j < num; j++) {
			for (int k = 0; k < num; k++) {
				scanf("%1d", &ary[j][k]);
			}
		}


		temp = 9999;
		fill(&bo[0][0], &bo[0][0] + sizeof(bo), false);

		dfs(0, 0, ary[0][0]);

		cout << "#" << i + 1 << " " << temp << endl;

	}
}

2. queue를 이용한 bfs방법

#include <stdio.h>
#include <queue>
#include <memory.h>


using namespace std;
int total , num;
int ary[100][100];
int temp[100][100];
bool bo[100][100];
struct Node {
	int x;
	int y;
    Node(int _x, int _y) {
        x = _x;
        y = _y;
    }
};
void bfs() {
	queue<Node> q;
	q.push(Node(0, 0));
	bo[0][0] = true;
int dx[] = { 1,-1,0,0 };
    int dy[] = { 0,0,1,-1 };
	while (!q.empty()) {
		int x = q.front().x;
		int y = q.front().y;
		q.pop();
		for (int i = 0; i < 4; i++) {
			 int ax = x + dx[i];
            int ay = y + dy[i];
			if (ax < 0 || ay < 0 || ax >= num || ay >= num ) continue;
                if (!bo[ax][ay] || temp[ax][ay] > temp[x][y] + ary[ax][ay]) {
               temp[ax][ay] = temp[x][y] + ary[ax][ay];
                    q.push(Node(ax, ay));
                    bo[ax][ay] = true;   
             }
		}
	}

}
void init() {
	memset(temp, 0, sizeof(temp));
	memset(bo, false, sizeof(bo));
}
int main()
{
    scanf("%d", &total);
    for (int i = 1; i <= total; i++) {
		init();
    scanf("%d", &num);
        char buf[101];
        for (int j = 0; j < num; j++) {
            scanf("%s", &buf);
			for (int k = 0; k < num; k++) {
			ary[j][k] = buf[k] - '0';
            }
		}
		bfs();
        printf("#%d %d\n", i, temp[num - 1][num - 1]);
	}
}
반응형
반응형

1. 사전 준비

1. 라즈베리파이3B+
2. MicroSD카드, 리더기 (SD카드는 OpenCV설치 및 Yolo사용을 위해 16GB 이상을 선택했습니다)


2. OS 설치

  1. https://www.raspberrypi.org/downloads/raspbian/ 에 접속하여 zip 파일을 다운로드한다.

     

  2. https://sourceforge.net/projects/win32diskimager/ 에 접속하여 Win32 Disk Imager를 다운로드한다. 설치가 완료되면 Image File의 폴더 아이콘을 클릭하여 다운로드하였던 라즈 비안 파일을 선택하고 Device의 SD카드 드라이브를 선택하고 write버튼을 누른다.


3. 설치 결과

설치된 SD카드를 라즈베리파이에 넣고 부팅시키면 실행화면을 볼 수 있습니다. 

 

반응형
반응형

1. Node.JS란?

Node.js®는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. (홈페이지)

JAVASCRIPT를 브라우저가 아닌 다양한 용도로 사용하기 위해 만들어졌다고 한다. 파일 시스템, 서버 등 사용이 가능하며 내 개인적으로는 서버사이드 언어로 생각해도 무방할 것 같다.


2. Node.JS의 특징

1) V8엔진을 기반으로 한다

 

2) 비동기 프로그래밍 방식

Node.JS는 비동기 방식으로 Single-Thread기반으로 동작하기 때문에 생기는 문제들이 있다 (callback 지옥) 또한 처리 작업이 오래 걸리면 전체 서버에 영향을 줄 수 있다는 단점이 있다 또한 이후 async를 사용해 동기식으로 해결하는 방법도 공부해볼 예정이다.

 

3) 프론트엔드와 백엔드를 자바스크립트 언어로 관리가 가능하다

 

등....

 


3. Node.JS 설치

우분투 16.04버전을 기반으로 진행하였으며 설치방법은 다음과 같다.

sudo apt-get update
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs


//설치 완료후 입력하면
node -v
//node버전 출력

 

 

반응형
반응형

링크
https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


1. 해결방법

모든 지점을 상 하 좌 우로 들리면서 7번째로 도착하면 set에 저장하면 자동으로 중복을 제거해 줄 수 있을 거라고 생각했다. 따라서 모든 지점을 상 하 좌 우로 들리는 방법을 코드로 구현하려 하였으나 결국 검색하여 찾아보니 dfs와 bfs방법을 사용한다고 한다. 이 문제의 해결방법으로는 dfs를 사용했고 dfs와 bfs는 따로 나중에 알고리즘에 추가하도록 할 예정이다.


2. 코드

#include <string>
#include <math.h>
#include <iostream>
#include <set>
using namespace std;

int num = 0;
int arr[4][4];
set<int> setary;
void dfs(int x, int y, int val, int dept) {
	int nx[4] = { 0, 0, -1, 1 };
	int ny[4] = { -1, 1, 0, 0 };
	for (int i = 0; i < 4; i++) {
		if (dept == 7) {
			setary.insert(val);
			return;
		}
		int dx = x + nx[i];
		int dy = y + ny[i];

		if (dx < 0 || dx >= 4 || dy < 0 || dy >= 4) continue;
		else {
			dfs(dx, dy, val * 10 + arr[dy][dx], dept + 1);
		}
	}
}
int main()
{
	cin >> num;
	for (int i = 1; i <= num; i++) {
        setary.clear();
		for (int j = 0; j < 4; j++) {
			for (int k = 0; k < 4; k++) {
				cin >> arr[j][k];
			}
		}
		for (int j = 0; j < 4; j++) {
			for (int k = 0; k < 4; k++) {
				dfs(j, k ,arr[j][k], 1);
			}
		}
		cout << "#"<< i << " " << setary.size() << endl;
	}
}

main함수에서 dfs(j, k, arr[j][k], 1)이 부분을 처음에 0, 0 arr[j][k], 1로 하였다 이때 값이 항상 같은 오류가 생겼고 이를 j k로 수정하며 해결하였다.

반응형
반응형
링크
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


1) 해결방법

배열로 입력값을 입력받은 후 양옆 두 칸 총 4칸 중 현재 칸보다 값이 크면 PASS, 값이 작다면 두 개의 차이 값을 구하여 가장 작은 차이 값이 View가 되는 값이라고 생각하였고 이를 코드로 구현하였다.


2) 코드

#include "pch.h"
#include <iostream>
#include <algorithm>

int main()
{
//10번 입력값을 받음
	for (int j = 0; j < 10; j++) {
		int input = 0;
		int result = 0;
		std::cin >> input;
		int array[1000] = { 0 };

		for (int i = 0; i < input; i++) {
			std::cin >> array[i];
		}
//3번째부터 마지막2칸을 제외한 97번째 까지 진행
		for (int i = 2; i < input - 2; i++) {
			int min = 9999;
			int minary[4] = { 0 };
            //현재값보다 양옆의 값이 더 크다면 continue
			if (array[i] <= array[i - 2] || array[i] <= array[i - 1] || array[i] <= array[i + 1] || array[i] <= array[i + 2]) {
				continue;
			}
			else {
				minary[0] = array[i] - array[i - 2];
				minary[1] = array[i] - array[i - 1];
				minary[2] = array[i] - array[i + 1];
				minary[3] = array[i] - array[i + 2];
				for (int i = 0; i < 4; i++) {
					min = std::min(min, minary[i]); //최소값 구함
				}
				result = result + min;
			}
		}
		std::cout << "#" << j + 1 << " " << result << std::endl;
	}

	return 0;
}
반응형

+ Recent posts