반응형

 

반도체 공정은 크게 전공정과 후공정으로 나누어 집니다.

전공정에는 cleaning, deposition, pr coationg, lithography, etching 등이 있고 

후공정에는 packaging, assembly 등으로 나뉘고 테스트도 포함됩니다.

 

건축과 비유하게 되면

 

 

반도체 회사들은 크게 6가지로 나눌 수 있습니다.

 

이렇게 6가지입니다. IDM은 우리 흔히 알고있는 반도체 대기업들이 포함됩니다. 설계, 생산, 판매 등 종합적으로 반도체를 관리하는 회사들입니다. 국내 IDM은 삼성전자와 하이닉스입니다.

FABLESS는 반도체 생산이 아닌 설계만 하는 회사입니다. 대표적으로 AMD, NVIDIA가 있습니다.

FOUNDERY는 위탁생산업체입니다. 생산 설비만은 갖추고 고객사가 원하는 반도체들을 생산해줍니다. 삼성전자도 foundery 사업을 하고있습니다. 

그외에도 패키징, 테스트, 장비회사등으로 분류할 수 있습니다.

 

직무는 크게 3가지

로 나눌 수 있습니다. 

연구 개발은 기존보다 더 나은 것을 개발하여 회사의 기술력과 이익을 발전시키는 업무이고 생산제조는 양산 수율을 유지하며 제품을 만들고 이슈를 빠르게 해결하는 업무입니다. 

 

각각의 장단점이 존재하고 3가지 업무 모두 중요한 절차입니다.

 

아래 그림은 반도체 공정에서의 2 업무의 역할입니다. 

다음시간에는 FAB이 무엇인지에 대해서 포스팅하겠습니다. 

반응형
반응형

문제링크: https://www.acmicpc.net/problem/1038

 

1038번: 감소하는 수

음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 ��

www.acmicpc.net

 

많이 고민한 문제입니다.

첫번째로 dp적인 사고로 생각되지 않아 고민하였습니다.

 

저는 가변 배열인 vector를 사용하여 해결하였습니다. 

  1. 1~9 을 미리 vector에 넣고 
  2. 순서대로 자신보다 작은 수를 뒤에 붙여 vector에 다시 넣습니다.
  3. 즉 1인 경우 10을 vector에 2인 경우 20 21 을 vecor에 넣습니다.

이 과정을 반복하며 vector 를 구성하여 문제를 해결했습니다.

 

 

 

 

 

하지만 이문제에는 함정이 존재합니다.

만약 N번째 감소하는 수가 없다면 -1을 출력한다.

위 조건이 함정입니다. 

 

생각해보니 9876543210 << 이상부터는 더이상의 감소하는 수가 존재하지 않습니다.

 

그렇다면 9876543210 은 몇번째 숫자일까요?

 

1의 자리수 일때는 1~9  -> 10C1

2의 자리수 일때는 1 + 2 + ~ + 9 =45  -> 10C2

 

.

.

.

.

9의 자리수 일때는 1 -> 10C10

즉 아래 식만큼 가능합니다.

 

1023입니다.

하지만 하나도 선택하지 않을때를 빼면 1022번까지만 가능합니다. 이후 숫자는 -1 을 출력하게끔 구현해야함

 

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
vector <long long> que;
int n = 0, cnt = 0;


int main() {


	cin >> n;
	if (n > 1022) {
		cout << -1 << endl;
		return 0;
	}
	if (n == 0) {
		cout << 0 << endl;
		return 0;
	}
	for (int i = 1; i <= 9; i++) { //초기값 지정
		que.push_back(i);
		cnt++;
	}
	

	for(int i=0;i<que.size();i++) {
		if (cnt >= n)
			break;
		long long n = que[i];
		
		for (int i = 0; i <= 9; i++) {
			if (n % 10 > i)
				que.push_back(n * 10 + i),cnt++;
			
		}

	}
	cout << que[n-1] << endl;
	return 0;

}

 

반응형
반응형

(안읽으셔도 되요)반도체는 상온에서 전기를 전하는 전도율이 구리 같은 도체와 애자, 유리 같은 부도체(절연체)의 중간 정도이고, 가해진 전압이나 열, 빛의 파장 등에 의해 전도도가 바뀐다. 일반적으로는 규소 결정에 불순물을 넣어서 만든다. 주로 증폭 장치, 계산 장치 등을 구성하는 집적회로를 만드는 데에 쓰인다.  

 

라는 사전 정의입니다.. (너무 어려운말)

 

 

 

 

모든 전자기기에 들어가는 것이 반도체입니다. 

그리고 반도체들도 각각의 종류가 상세하게 나뉘고 

다양한 공정별로 제작이 되어집니다.

 

 

반도체는 물질이며 보통 고체 화학 원소 또는 화합물, 어떤 조건에서는 전기를 전도 할 수 있지만 다른 조건에서는 전기를 전도 할 수 없습니다. 전류 제어를위한 좋은 매체입니다. 라는 뜻입니다.

 

자신이 원할 때 on/off가 가능한 물질이 반도체입니다.

 

기기와 연결되는 카메라, 디스플레이 등이 우리의 눈, 코와 같은 기관들이라면, 반도체의 한종류인 cpu는 사람의 뇌라고 할 수 있습니다. 

 

 

 

반도체는 5가지 목표를 가지고 있습니다.

  • 1. 저전력 소비(Low Power Consumption)
  • 2. 빠른 프로그램밍 작성(High Speed Programming)
  • 3. 긴 내구성, 지구력(Long durability Endurance)
  • 4. 강력한 신뢰성(Strong reliability)
  • 5. 높은 응집성(High Density)

입니다. 

 

각각의 목표들은 서로 상이합니다. 높은 성능을 위해서는 전력 소비가 증가하게 되고 전력 소비를 낮추면 성능이 감소하는 형태입니다. 

그렇기 때문에 이상적인 반도체는 존재할 수 없고, 적절히 기능하는 합리적인 반도체를 개발합니다.

 

다음포스팅에서는 반도체 개발 공정에 대해서 포스팅하겠습니다.

반응형
반응형

이전 포스팅: https://gusdnr69.tistory.com/category/IOT%EA%B0%9C%EB%B0%9C/node.js

 

'IOT개발/node.js' 카테고리의 글 목록

코딩, 개발, 애니덕질

gusdnr69.tistory.com

 

play-sound는  mp3 파일에 한해서 재생이 됩니다.

다양한 음원 파일을 재생할 수 있는 라이브러리를 소개하겠습니다.

 

https://dyclassroom.com/reference-javascript/work-with-audio-in-javascript-using-howler-js

 

Work with audio in JavaScript using Howler.js - Reference JavaScript - DYclassroom | Have fun learning :-)

In this tutorial we will learn about Howler.js which makes working with audio in JavaScript easy and reliable across all platforms. Click here to visit Howler.js GitHub repository. Install If you have Node and NPM installed then use the following command i

dyclassroom.com

 

Howler.js 입니다. 웹 UI를 통해서 mp3외에 다른 형식의 음원파일도 재생이 가능합니다.

 

 

 

 

저는 wav파일을 재생하기 위해서 

node-aplay 

를 사용하였습니다.

 

 

설치 절차

sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
sudo apt-get install alsa-base alsa-utils
sudo npm install node-aplay

 

 

 

예시 코드

var Sound = require('node-aplay');
 
// fire and forget:
new Sound('/path/to/the/file/filename.wav').play();
 
// with ability to pause/resume:
var music = new Sound('/path/to/the/file/filename.wav');
music.play();
 
setTimeout(function () {
    music.pause(); // pause the music after five seconds
}, 5000);
 
setTimeout(function () {
    music.resume(); // and resume it two seconds after pausing
}, 7000);
 
// you can also listen for various callbacks:
music.on('complete' function () {
    console.log('Done with playback!');
});

 

 

 pause나 resume은 미리 변수에 sound 객체를 저장해놓아야만 가능합니다. 

setTimeout 없이 사용하셔도 무방합니다.

 

 

반응형
반응형

 

서류전형과 면접전형으로 진행되었습니다.

7월 한달간 반도체 전반에 대한 교육을 받고 8.1~10.30 3달동안 하이닉스의 협력업체에서 채용전환형 인턴생활을 하는 과정입니다.

 

 

서류 문항은 기존 sk 지원서와 동일하여 쓰는데 크게 어려움을 가지지 않았습니다!

면접은 스터디를 통해서 준비하였습니다.

 

면접은 해당기업별로 진행되었습니다. 자기소개서 위주로 진행이 되었고,  면접관님들이 편안한 분위기에서 대답할  수 도와주셔서 덜 긴장할 수 있었습니다. 

 

해당 카테고리에서는 하이파이브 과정동안의 일상과 교육과정에 대한 포스팅을 하겠습니다.

 

 

 

 

반응형
반응형

문제링크:https://www.acmicpc.net/problem/2688

 

2688번: 줄어들지 않아

문제 어떤 숫자가 줄어들지 않는다는 것은 그 숫자의 각 자리 수보다 그 왼쪽 자리 수가 작거나 같을 때 이다. 예를 들어, 1234는 줄어들지 않는다.  줄어들지 않는 4자리 수를 예를 들어 보면 0011,

www.acmicpc.net

 

전형적인 dp문제입니다. 이전단의 결과값들이 현재 결과값에 영향을 미치기 때문입니다. 

예를 들어 n = 1일때 0 1 2 3 ~~ 9 로 총 10가지 경우의 수입니다.

 

n=2 일때  

0으로 시작할때  0~9 로 10개

1로 시작할때 1~9로 9개

2로 시작할때 2~9로 8개

3로 시작할때 3~9로 7개

.

.

.

9로 시작할때 9~9로 1개

 

for (int k = j; k <= 9; k++)
      dp[i][j] += dp[i - 1][k]; 

와 같은 점화식을 가지게 됩니다.

 

 

 

정답코드입니다. 

#include <iostream>
using namespace std;

long long dp[65][10] = { 0 };
int t = 0, n = 0;

int main() {

	for (int i = 0; i <= 9; i++)
		dp[1][i] = 1;

	for (int i = 2; i <= 64; i++) 
		for (int j = 0; j <= 9; j++) 
			for (int k = j; k <= 9; k++)
				dp[i][j] += dp[i - 1][k];
		
	cin >> t;
	while (t--) {
		cin >> n;
		long long result = 0;
		for (int i = 0; i <= 9; i++)
			result += dp[n][i];
		cout << result << '\n';
	}
}

 

반응형

'알고리즘 > DP' 카테고리의 다른 글

[백준] 1256-사전(C++)  (0) 2020.09.13
[백준] 13398-연속합2(C++)  (0) 2020.09.06
[백준] 11049-행렬 곱셈 순서(C++)  (0) 2020.06.13
[백준] 11066-파일 합치기(C++)  (0) 2020.06.11
[백준] 2602-돌다리 건너기(C++)  (0) 2020.06.10
반응형

문제링크: https://www.acmicpc.net/problem/16236

 

16236번: 아기 상어

N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가��

www.acmicpc.net

 

시뮬레이션 문제입니다. 상어가 먹이를 먹으면서 돌아다니는 시간을 출력하는 문제입니다.

 

 

  • 1. bfs 를 통해서 도달할 수 있는 위치들의 최단거리를 표시합니다. 
  • 2. 배열을 탐색(O(n))하면서 먹을수 있는 먹이이고 최단거리인 먹이를 선택합니다. 
  • 3. 먹이를 선택할때에는 위에 있는 먹이, 왼쪽에 있는 먹이가 우선순위를 가지게 됩니다. 
  • 4. 1~3번을 반복하며 상어가 이동할 수 있는 최대경로를 계산하고 먹을 먹이가 없는 시점에서의 값을 출력합니다. 

 

예외를 처리해주어야 하는게 상어 위치를 9로 만들어 두시게 되면은 만약 상어의 크기가 9보다 커지게 될때 bfs에서 계속 해당 위치를 탐색하며 무한루프에 빠질 수 있습니다. 그부분 조심하시고, 문제의 조건들을 꼼꼼하게 확인하시면 그렇게 어렵지 않은 문제였습니다.

 

 

정답코드입니다.

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;


int n = 0, result = 0;
int sy, sx, ssize = 2, s_ex = 0;
int arr[21][21] = { 0 };
int visited[21][21];
int y_ar[4] = { 0,0,1,-1 };
int x_ar[4] = { 1,-1,0,0 };

void bfs() {

	queue <int> que[2];
	que[0].push(sy);
	que[1].push(sx);
	visited[sy][sx] = 1;
	while (que[0].empty() != 1) {
		int yy = que[0].front();
		int xx = que[1].front();

		que[0].pop(), que[1].pop();

		for (int i = 0; i < 4; i++) {
			int y = y_ar[i] + yy;
			int x = x_ar[i] + xx;

			if(x >=1 && x<=n && y>=1 && y <=n)
				if (visited[y][x] == 0 && arr[y][x] <= ssize) {
					visited[y][x] = visited[yy][xx] + 1;
					que[0].push(y);
					que[1].push(x);

				}
		}

	}
}

bool select_fish() {

	int len = (int)2e9;
	int select_y, select_x;

	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++)
			if (visited[i][j] != 0 && visited[i][j] < len)
				if (ssize > arr[i][j] && arr[i][j] != 0)
					len = visited[i][j], select_y = i, select_x = j;

	if (len != (int)2e9) {

		// 물고기 자리 이동
		arr[sy][sx] = 0;
		sy = select_y;
		sx = select_x;
		arr[sy][sx] = 1000000000;
		result += len - 1;
		s_ex++;
		if (s_ex == ssize)
			s_ex = 0, ssize++;
		return true;
	}
	return false;

}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++) {
			cin >> arr[i][j];
			if (arr[i][j] == 9)
				sy = i, sx = j, arr[i][j] = 1000000000;

		}
	while (1) {
		bool jud=false;

		memset(visited, 0, sizeof(visited));
		bfs();

	
		jud = select_fish();
		if (jud == false)
			break;

	}

	cout << result << '\n';
	return 0;
}
반응형

'알고리즘 > 시뮬레이션' 카테고리의 다른 글

[백준] 13459-구슬 탈출(C++)  (3) 2020.08.17
[백준] 16234-인구 이동(C++)  (0) 2020.08.12
[백준] 11559-Puyo Puyo(C++)  (0) 2020.05.03
[백준] 14891-톱니바퀴(C++)  (0) 2020.04.28
[백준] 14500-테트로미노(C++)  (0) 2020.04.14
반응형

문제링크:https://www.acmicpc.net/problem/5549

 

5549번: 행성 탐사

문제 상근이는 우주선을 타고 인간이 거주할 수 있는 행성을 찾고 있다. 마침내, 전 세계 최초로 인간이 거주할 수 있는 행성을 찾았다. 이 행성은 정글, 바다, 얼음이 뒤얽힌 행성이다. 상근이는

www.acmicpc.net

 

 

전형적인 구현문제입니다.

 

  • 1. 사각형을 기준으로 포함되는 정글, 바다, 얼음 값들을 저장합니다.
  • 2. 사각형기준으로 jungle = pos[c][d][0] - pos[a - 1][d][0] - pos[c][b - 1][0] + pos[a - 1][b - 1][0] 을 통해 해당 위치의 개수를 구합니다.

 

정답 코드입니다. 시간초과를 주의하기 위해 '\n' 를 사용해야합니다.

#include <iostream>
#include <string>
using namespace std;
int m = 0, n = 0, k = 0;
int a, b, c, d;
char arr[1001][1001];
int pos[1001][1001][3] = { 0 }; // J O I순
string temp;
int main() {
	cin >> m >> n >> k;
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	for (int i = 1; i <= m; i++) {
		cin >> temp;
		for (int j = 1; j <= n; j++)
			arr[i][j] = temp[j - 1];
	}

	//테두리를 미리 표시 
	for (int i = 1; i <= n; i++) {
		if (arr[1][i] == 'J') pos[1][i][0] = 1;
		else if (arr[1][i] == 'O') pos[1][i][1] = 1;
		else if (arr[1][i] == 'I') pos[1][i][2] = 1;

		pos[1][i][0] += pos[1][i - 1][0];
		pos[1][i][1] += pos[1][i - 1][1];
		pos[1][i][2] += pos[1][i - 1][2];
	}

	for (int i = 1; i <= m; i++) {
		if (arr[i][1] == 'J') pos[i][1][0] = 1;
		else if (arr[i][1] == 'O') pos[i][1][1] = 1;
		else if (arr[i][1] == 'I') pos[i][1][2] = 1;

		pos[i][1][0] += pos[i - 1][1][0];
		pos[i][1][1] += pos[i - 1][1][1];
		pos[i][1][2] += pos[i - 1][1][2];
	}
	
	for (int i = 2; i <= m ; i++) {
		for (int j = 2; j <= n ; j++) {
			pos[i][j][0] = pos[i - 1][j][0] + pos[i][j - 1][0] - pos[i - 1][j - 1][0];
			pos[i][j][1] = pos[i - 1][j][1] + pos[i][j - 1][1] - pos[i - 1][j - 1][1];
			pos[i][j][2] = pos[i - 1][j][2] + pos[i][j - 1][2] - pos[i - 1][j - 1][2];

			if (arr[i][j] == 'J') pos[i][j][0] += 1;
			else if (arr[i][j] == 'O') pos[i][j][1] += 1;
			else if (arr[i][j] == 'I') pos[i][j][2] += 1;
		}
	}


	// 
	for (int i = 0; i < k; i++) { 
		cin >> a >> b >> c >> d;
		int jungle = pos[c][d][0] - pos[a - 1][d][0] - pos[c][b - 1][0] + pos[a - 1][b - 1][0];
		int ocean  = pos[c][d][1] - pos[a - 1][d][1] - pos[c][b - 1][1] + pos[a - 1][b - 1][1];
		int ice    = pos[c][d][2] - pos[a - 1][d][2] - pos[c][b - 1][2] + pos[a - 1][b - 1][2];
		cout << jungle << ' ' << ocean << ' ' << ice << '\n';
	}

}

 

 

반응형

'알고리즘 > 구현' 카테고리의 다른 글

[백준] 5624-좋은 수  (1) 2020.08.08
[백준] 6593-상범 빌딩(C++)  (0) 2020.07.05
[백준] 1043-거짓말(C++)  (0) 2020.06.08
[백준] 2140-지뢰찾기(C++)  (0) 2020.05.20
[백준] 6416-트리인가?(C++)  (0) 2020.05.18

+ Recent posts