[SEMI] PIO 통신이란?

PIO 통신 Parallel Input Output : 평행 입출력 통신 I/O 상태를 전당하는 입출력 =E84 통신 : SEMI 규약으로 장비 간 제품 이동 시 사용 물류장비들을 조작하는 AMHS(Controller), Equipments 간 통신 I/O 8 bit로 통신 Active는 IB 장비들, Passive는 STK 혹은 EQP Active와 Passive 장비들 간의 이동을 시나리오에 따라 통신하는 과정. LR, UR, READY, BUSY, COMPLETE 등. [예시 영상](https://www.youtube.com/watch?v=6qPP4I5hx3Q&t=5s) Reference [Youtube 깹 tv](https://www.youtube.com/watch?v=6qPP4I5hx3Q&t=5s)

IOT 2022.07.12 0

[알고리즘] 모든 정점을 연결하는 MST (Prim, Kruskal)

최소 신장 트리(MST, 크루스칼, 프림 알고리즘) 최소 신장 트리(Minnimum Spanning Tree) spanning Tree 중에서 사용된 간선들의 가중치 합이 최소인 트리. 신장 트리(Spanning Tree)란 그래프 내의 모든 정점을 포함하는 트리 최소 연결 : 간선의 수가 가장 적다. n개의 정점을 가지는 그래프의 최소 간선의 수는 (n-1)개 이고, (n-1)개의 간선으로 연결 되어이으면 필연적으로 트리형태가 되고 이게 신장 트리이다. 즉 그래프에서 일부 간선을 선택해서 만든 트리. DFS, BFS을 이용하여 그래프에서 신장 트리를 찾을 수 있다. 탐색 도중에 사용된 간선만 모으면 만들 수 있다. 하나의 그래프에는 많은 신장 트리가 존재할 수 있다. Spanning Tree는 트리의 ..

[Github] fork 사용하기(다른 사람의 repository를 내려받기)

1. 내 github에 추가할 상대 repository를 fork해오기(오른쪽 위에 포크모양 클릭) 2.fork해서 만들어진 내 github의 repository url을 복사 후 받아오기 (clone URL) 3. 원격 저장소 내 내부 저장소로 받아오기. git clone [Clone URL] 4. pull request작업 수행할 branch 생성 git checkout -b [branchName] 5. 원본 저장소를 원격 저장소에 추가. git remote add origin(branchname) [Clone URL] 6. 코드 수정 및 파일 추가 7. 수정사항을 add git add [fileName] 8.add 한 파일들을 commit git commit -sm "[commit mesagge]"..

GitHub&Git 2021.07.14 0

[MarkDown] 특수문자를 특수문자로 입력하기

Symbol 뒤에 HTML Number를 붙혀주면 특수문자를 입력할 수 있다. Symbol HTML Number HTML Name Description ! ! exclamation point " " "\; double quotes # # number sign $ $ dollar sign % % percent sign & & &\; ampersand ' ' single quote ( ( opening parenthesis ) ) closing parenthesis * * asterisk + + plus sign , , comma - - minus sign - hyphen . . period / / slash : : colon ; ; semicolon > > greater than sig..

HTML 2022.07.25 0

[Python] 파이썬 requests, json으로 REST API data 보내고 받기

카카오톡 2차 정답이 없는 문제. 요구사항을 기반으로 trade-off를 감안해 로직을 설계. 로직을 개선해가는 역량. REST API 호출. API결과가 JSON 포맷. REST API 호출 처리 모듈, JSON 파서 사전 준비. pprint, bs4 쓸수있나? 일단 깔아놔보기. JSON? Java Script Object Notation. 통신을 통해 데이터를 주고 받는데 사용되는 규칙, 형식 JSON은 dictionary에 key - value 형식으로 이루어진다. REST API로 이용해 받아온 값을 JSON형태 import json, requests response = requests.get(URL).json() response = requests.post(URL,header,data).json..

Django&Python 2021.09.23 0

[JS] JS 30 - 10. click한 상태에서 shiftKey를 누르는 event

https://youtu.be/RIPYsKx1iiU 1. checkboxes This is an inbox layout. Check one item inbox라는 박스안에 각 checkbox가 존재. 2. e.shiftKey const checkboxes = document.querySelectorAll( '.inbox input[type="checkbox"]' ); let lastChecked; function handlecheck(e) { let inBetween = false; if (e.shiftKey && this.checked) { checkboxes.forEach((checkbox) => { if (checkbox === this || checkbox === lastChecked) { inB..

JavaScript 2021.09.16 0

[OS] 페이징과 세그멘테이션, 메모리관리

페이징과 세그먼테이션 기법을 쓰는 이유 다중 프로그래밍 시스템에 여러 프로세스를 수용하기 위해 주기억장치를 동적 분할하는 메모리 관리 작업이 필요해서 메모리 관리 배경 각각 프로세스 는 독립된 메모리 공간을 갖고, 운영체제 혹은 다른 프로세스의 메모리 공간에 접근할 수 없는 제한있음. 운영체제 만이 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 제약을 받지 않음. Swapping : 메모리의 관리를 위해 사용되는 기법. 표준 Swapping 방식으로는 round-robin 과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 보조 기억장치(e.g. 하드디스크)로 내보내고 다른 프로세스의 메모리를 불러 들일 수 있다. 이 과정을 swap이라함. 주 기억장치(RAM)..

운영체제 2021.09.02 0

[백준][Python] 14391 종이조각 : 비트마스킹 전수조사

배열에서 경우의 수로 합이나 최소 최대 구하기 나올때마다 BFS, DFS 보다 비트마스킹하면 어떨까 상상만 해봤는데 실제로 접한 첫문제. 경우의 수 브루트포스 문제를 비트마스킹으로 어떻게 순회할 것인가 잘 나타낸 문제 같다. 코드 전체 다 외워도 손색없는 문제. 아이디어는 배열의 가로, 세로 계산 여부를 0,1로 나누어 1이면 가로계산에 이용하고 0이면 세로계산에 이용한다. 각 열, 행을 순회하며 1이 이어지면 왼쪽으로 한칸씩 늘려주며 누적합의 자릿수를 늘려주고 0이 나오면 자릿수를 초기화시키는 형식. def bitmask(): global maxAns # 비트마스크로 2^(N*M)의 경우의 수를 따져본다 for i in range(1

백준 2021.09.01 0

[Programmers] 카카오기출2018 뉴스 클러스터링.

set의 교집합과 합집합에 대한 이해가 좀 필요한 문제이다. 평소 set을 잘 쓰지 않는데 많이 배운 문제. 종종 개념을 활용한 풀이를 구상해봐야겠다. from collections import Counter def solution(str1, str2): str1 = str1.lower() str2 = str2.lower() str1_elements_set = [] str2_elements_set = [] # 두글자씩 끊어 원소집합으로 만듦(둘다 알파뱃일 경우만.) for i in range(len(str1)-1): if str1[i].isalpha() and str1[i+1].isalpha(): str1_elements_set.append(str1[i] + str1[i+1]) for j in range..

programmers 2021.08.31 0

[알고리즘] sweeping-line 라인 스위핑을 통한 필터링

라인스위핑 스위핑 알고리즘이란? 특정 선이나 공간을 한쪽에서부터 쓸어버리는 식의 알고리즘. 일정 좌표, 축기준 정렬 한 뒤 일정 시점의 좌우 가장 가까운 두 점사이의 거리보다 멀리떨어진 점은 조사하지 않는 방식. 가지치기를 하겠다는 이야기다.(O(NlogN)) 아래는 2261번 문제에 대한 분할정복 풀이. import sys input=sys.stdin.readline INF=sys.maxsize # 두 점 사이의 거리를 구하는 함수 def dist(a,b): return (a[0]-b[0])**2+(a[1]-b[1])**2 def divide(start,end): # 점 하나면 버림 if start==end: return INF # 점 두개면 거리구해서 리턴 elif end-start==1: retur..

[알고리즘] SCC (Strongly Connected Component) 강한 연결 요소

강한 연결 요소(SCC) 무향 그래프에서 절단점이 존재하지 않는 그래프를 우리는 Biconnected component라고 부릅니다. 절단점이 없다면 그래프 상의 어떤 점을 삭제하더라도 임의의 두 정점은 서로로 가는 경로가 존재하게 됩니다. Biconnected Component Undirected Graph에서 절단점이 존재하지 않는 그래프 Strongly Connected Component 만약 그래프의 임의의 한 정점에 대해 다른 모든 정점으로 가는 경로가 존재한다면 그 그래프를 SCC(Strongly Connected Component)라고 한다. SCC(Strongly Connected Component)특징 같은 SCC내에서 뽑은 임의의 U, V 점에서 U->V 혹은 V->U의 경로(직/간접적..

[백준][Python] 15927 회문은 회문이 아니야

최대길이 회문 확인. 사실 while문보다 for문, slicing이 더 빠르다. import sys inmput = sys.stdin.readline def check(a,left,right): while left < right: if a[left] != a[right]: return 0 left += 1 right -= 1 return 1 s = input().rstrip() n = len(s) # 최대 길이가 회문 아니면 n if not check(s,0,n-1): print(n) # 최대길이에서 하나뺀게 회문 아니면 n-1 elif not check(s,0,n-2): print(n-1) else: print(-1)

백준 2021.08.18 0

[DNS] domain name syetem 우리는 쿼리를 어떻게 처리하는가?

DNS(domain name server) Domain name을 ip주소로 바꿔주는 시스템(서비스) IP로 통신하던 방식-> SRI-NIC에서 전세계의 IP와 도메인을 수집해서 유저는 그곳을 통해서 hosts파일을 받도록 바뀜(개인이 hosts파일을 관리하기에는 너무 소요가 많아서.) ->DNS가 고안됨. -> hosts파일에 domain name과 IP주소를 적어놓고 대응하는 방식 IP주소 없이 도메인 네임을 통해 우리는 원하는 웹 사이트로 갈 수 있음. 쿼리를 통한 매핑. DNS통신 구성 요소 다른 서버들과 메세지를 통해 소통하기 위한? DNS 서버에 질의 dev.taggle.kr A IN (Query name string : 질의를 하고싶은 대상. / Type : 어떤 데이터를 받고싶은지 (A는a..

네트워크 2021.08.03 0

[알고리즘] 비트마스크???!!!

비트마스크(bit mask) 비크마스크란 무엇인가? 정수를 이진수로 표현, 비트 연산을 통해 문제를 해결해 나가는 기술. 집합에서 하나의 원소는 하나의 bit로 표현(꺼져있다, 켜져있다.) ex switch_states = [True, False, False, True, True, False, False, False, True, True] switch_states = 0b1001100011 # 611, python에서는 앞에 '0b'를 붙여 이진수 표현 가능 정수형으로 표현하면 비트연산을 통한 삽입, 삭제, 조회 등이 간단해짐 더 간결한 코드 작성이 가능 더 빠른 연산이 가능 더 작은 메모리의 사용. 비트마스크를 이용한 정수 표현으로 다이나믹 프로그래밍이 가능함. (중요) 위와같은 장점이 ..

[백준][Python] 1655 가운데를 말해요.

계속 쌓이는 값들 중에서 도 뭔가 sort를 계속 해주며 중앙값을 읽어야만 할것같지만 sort를 하다가는 시간초과에 걸릴게 자명.. sort를 하는대신 최대힙과 최소힙 두개를 만들어 읽어야하는값을 그 사이에 계속 컨트롤 해주는 방식으로 힙을 운용한다. 한쪽 힙의 길이가 길어지지 않도록 같은 길이면 왼쪽에 길이가 다르면 오른쪽에 넣어 균형을 맞춰주고 읽어야하는 왼쪽 힙의 value를 기준으로 좌우 크기가 역전되면 팝, 푸시를 통해 정렬된 상태를 유지해준다. import sys import heapq n = int(sys.stdin.readline()) max_h, min_h = [], [] # max_h[0][1]값을 기준으로 큰 값은 min_h, 같거나 작은 값은 max_h에 삽입 for _ in ran..

백준 2021.07.27 0

[GitHub] 깃헙 잔디 사라졌을 때 당황하지 않고 복구하는 방법.

1.잔디 옵션이 프라이빗으로 바뀌어있는지 확인한다. => public으로 바꾼다. 2. 깃헙에 등록되어있는 메일이 바뀌어서 local git의 메일주소와 불일치 하게 되었는지 확인한다. => 깃 메일을 일치시키던가 깃헙에서 삭제한 메일을 다시 등록한다. 3. 특정레포의 강제푸시 혹은 merge로 commit기록이 전부 초기화 됐다!! 이러면 정말 눈물나지만 해결 방법이 있다. github api를 이용해 과거로 회귀하는것. 1. Access Token을 발급받는다. https://github.com/settings/tokens 에 가서 토큰 생성을 누르고 repo전체 선택 후 발급 받는다. 2. 강제 푸시 전 혹은 레포가 정상일 적 마지막 커밋 SHA값을 확인한다. curl -H "Authorizatio..

GitHub&Git 2021.07.25 0

[백준] 틀렸을 시 원인 분석.

틀렸습니다 : output이 틀렷을 경우. testcase 초기화를 잘해줘야함. 시간초과 : 시간복잡도 제한을 못맞췄을 경우. => 보통 추상화 알고리즘을 잘못썼거나, 변하지 않는 dp값을 여러번 계산했을 경우(계산값 저장을 하지 않는 경우), 내장함수 계산값을 저장해두지 않고 반복문마다 돌리는 경우 => 파이썬에서 어떤 값이 같은지 비교할 때 == 대신 is를 사용하면 안됨. ++list를 큐 또는 덱으로 사용하면 절대 안됨. 반드시 collection.deque를 써야함. 런타임 에러 : 실행 시 나타나는 type, index접근 등 에러, 재귀함수가 있는 경우에는 재귀 깊이 제한인 sys.setrecursionlimit(100000)을 써줘야함. 메모리 초과 : sys.setrecursionlimi..

practivceAlgorithm 2021.07.10 0

[Git][Error] LF will be replaced by CRLF in 해결

git add . git add 시 warning: LF will be replaced by CRLF in 파일명 에러가 뜰 수 있다. 이는 OS마다 줄바꿈을 바라보는 문자열이 다르기 때문에 Git 이 볼때 어떤 방식을 선택할지 몰라 경고를 내린 것 LF : Mac, Linux(Unix) 줄바꿈 문자열 = \n : 다음 줄 같은위치 CR : Mac 초기 줄바꿈 문자열 = \r : 같은 줄 맨앞 CRLF : Window, DOX 줄바꿈 문자열 = \r\n : 다음줄 맨앞 해결방법은 autoarlf를 사용해 바꿔주면 된다. 윈도우 즉 LF -> CRLF는 git config --global core.autocrlf true Linux, Mac 즉 CRLF -> LF는 git config --global co..

GitHub&Git 2022.10.02 1

[Git] Git Rebase로 Conflict 해결

협업을 진행하다보면 conflct가 당연히 발생합니다. PR을 밀어 넣었을 때 기존 코드와 내 코드가 비교되는 과정에서 다른 코드가 원본에 Merge되면 비교과정이 올바르지 않게 되기 때문에 conflict가 발생하는데 이는 3-way-merge 방법 또는 rebase를 이용해 해결이 가능하다. 3-way-merge : base + 내 branch + upstrem의 최신버전 rebase : 내 branch + rebase 한 내용 rebase는 말 그대로 re + base로 내가 머지하려는 브랜치가 갈라져 나온 branch의 base를 바꾸겠다는 것이다. 이 과정을 통해 내 코드는 새로이 만들어진 base와 코드 대사과정을 하게되므로 Merge하는데 문제가 없게된다. 원리는 내 branch가 지속적으로..

GitHub&Git 2022.10.02 0

[Java] Java의 main() 메서드

자바의 main() 메서드 Java 프로그램은 특정 순서로 실행되는 Java 명령의 시퀀스기 때문에 시작과 끝이 있다. Java 프로그램을 실행하려면 JVM에 프로그램 실행을 시작할 위치를 신호해야한다. Java의 모든 명령어(코드)는 Java 클래스 내에 위치해야한다. 클래스는 함께 속한 데이터와 명령어를 그룹화하는 방법이다. 따라서 클래스는 변수와 메서드를 모두 포함 할 수 있다. 변수는 데이터를 포함할 수 있으며, 메서드는 데이터에 대한 작업 집합(명령어)을 함께 그룹화한다. 자바 클래스 선언 Java 코드는 클래스와 동일한 파일 이름을 가진 파일에 있어야하며 파일 접미사로 끝나야한다. 즉 파일이 클래스 이름과 일치하는 파일에 있어야 Java SDK의 Java 컴파일러 또는 Java IDE 내부에서..

Java 2022.07.28 0

[Java] 정규표현식

Regular Expression 컴퓨터 과학의 정규 언어로 부터 유래 특정한 규칙을 가진 문자열의 집합을 표현, 형식언어 정해진 형식을 사용자가 제대로 입력했는지 검증 즉 입력값이 형식에 맞는지 검증할 때 자주 사용함. java.util.regex 패키지 안의 Pattern Class와 Matcher Class 사용 문법 ^ 문자열 시작 $ 문자열 종료 . 임의의 한 문자(단 \은 넣을 수 없음). (SQL Like에서 _) * 앞 문자가 없을 수도 무한정 많을 수도 있음 (SQL Like에서 %) + 앞 문자가 하나 이상 ? 앞 문자가 없거나 하나 있음 [ ] 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냅니다. [] 내에서 ^ 가 선행하여 존재하면 not을 나타냄 { } 횟..

Java 2022.07.25 0

[자료구조] 파이썬으로 LRU cache O(1) 구현하기

LRU cache O(1) 캐시는 불필요한 통신을 줄이고 기민한 UX를 제공 DB과부하를 막음.(query결과 저장) Proxy, CDN(유저와 가까운 CDN node) 메모이제이션 OrderedDict이용 from collections import OrderedDict MAX_SIZE = 2 cache = OrderedDict() def get_user(user_id): if user_id in cache: cache.move_to_end(user_id) return cache[user_id] if len(cache) == MAX_SIZE: cache.popitem(last=False) cache[user_id] = fetch_user(user_id) return cache[user_id] last=F..

[Python] Python List, Dictionary, Set등 참조형 자료구조 복사

Python의 List와 Set, Dictionary등은 call by reference한다. 즉 a = [1, 2, 3] b = a b.append(4) print(a) # [1, 2, 3, 4] 할당 된 주소가 공유된다. 때문에 자료형 a 와 동일한 자료형 b를 만들기 위해 다음과 같은 방법을 사용할 수 있다. from copy import copy, deepcopy l = [1, 2, 3] s = {1, 2, 3} d = {1:1, 2:2, 3:3} # use copy(얕은복사) l_copy = copy(l) s_copy = copy(s) d_copy = copy(d) # use deepcopy(깊은 복사) l_deepcopy = deepcopy(l) s_deepcopy = deepcopy(s) d..

PYTHON 기능연습 2022.07.24 0