[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

[Programmers][Python] 2021 kakaoblind 카드 짝 맞추기

dfs로 각 순열의 카드 순서를 맞춰가며 카드를 2장씩 뒤집는 로직. 백트래킹, dijkstra로 최단 거리 측정. shift이동은 ctrl_move로 for문 이용. from collections import defaultdict from heapq import heappush, heappop from itertools import permutations def solution(board, r, c): def ctrl_move(x, y, dx, dy, visited): for i in range(1, 4): nx, ny = x + dx * i, y + dy * i if (nx, ny) in visited and not visited[(nx, ny)]: return (nx, ny) if dx == 1 a..

programmers 2021.10.17 0

[Django] admin 페이지 커스텀하기

첫번째 장고 앱 작성하기, part 7 관리자 폼 커스터마이징 수정 폼의 필드를 재정렬해 작동하는 법을 본다. admin.site.register(Question) 를 아래와 같이 수정한다. from django.contrib import admin from .models import Question class QuestionAdmin(admin.ModelAdmin): fields = ['pub_date', 'question_text'] admin.site.register(Question, QuestionAdmin) 모델의 관리자 옵션을 변경해야 할 때마다 모델 어드민 클래스를 만든 다음, admin.site.register()에 두 번째 인수로 전달한다. 수십 개의 필드가 있는 폼에 관해서는 폼을 fi..

Django&Python 2021.08.27 0

[Java] Java의 main() 메서드

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

Java 2022.07.28 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

[자료구조] 파이썬으로 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..

[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

[Programmers][Python] KAKAO 2018 프렌즈 4블록

자주나오는 유형. 규칙에따라 블록 부수고 중력작용. def bomb_block(b, m, n): block = set() for i in range(m - 1): for j in range(n - 1): if b[i][j] and b[i][j] == b[i][j + 1] == b[i + 1][j] == b[i + 1][j + 1]: for dx, dy in [(0, 0), (1, 0), (0, 1), (1, 1)]: nx, ny = i + dx, j + dy block.add((nx, ny)) if not block: return 0, 0 for x, y in block: b[x][y] = 0 new_board = [[0] * n for _ in range(m)] for j in range(n): idx..

programmers 2021.10.31 0

[백준][Python] 1719 택배 : 플로이드워셜 경로

결국 플로이드 워셜은 어떤 경로를 통해 움직이는가? 갱신은 어떤식으로 가능한가? 결국 최초의 움직임은 직접 간선으로부터 나온다. import sys input = sys.stdin.readline n, m = map(int, input().split()) dists = [[float('inf') for _ in range(n)] for _ in range(n)] pre_node = [[0 for _ in range(n)] for _ in range(n)] for _ in range(m): a, b, c = map(int, input().split()) dists[a-1][b-1] = min(dists[a-1][b-1],c) dists[b-1][a-1] = min(dists[b-1][a-1],c) pre_..

백준 2021.09.04 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

[OS] CPU Scheduling : 프로세스를 .CPU에 할당하는 방법들

CPU Scheduling 스케줄링 실행준비가 된 프로세스 중에서 하나를 선택해 CPU를 할당 하는 것. 결국 CPU를 잘 사용하기 위해 프로세스를 잘 배정하기 위함. 조건 : 오버헤드는 낮고, 사용률은 높고, 기아 현상은 낮을때. 목표 Batch System : 가능하면 많은 일을 수행한다. 시간(time)보다 처리량(throughout)이 중요하다. Interactive System : 빠른 응답 시간, 적은 대기 시간 Real-time System : 기한(deadline) 맞추기 선점 / 비선점 스케줄링 선점(preemptive) : OS가 CPU의 사용권을 선점 할 수 있는 경우, 강제 회수하는 경우 비선점(nonpreemptive) : 프로세스 종료 or I/O 등의 이벤트가 있을 때까지 실행..

운영체제 2021.08.30 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..

[SW 공학] 디자인 패턴 - 바퀴를 다시 발명하지 마라.

디자인 패턴(객체를 어떻게 구성할 것인가?) 이름의 중요성 디자인 패턴 이전에는 명칭이 없어서 같은 내용의 구조를 서로에게 설명해주기위해 수십시간을 낭비. 이름이 곧 개념을 정의한다 디자인 패턴도 이런 자주 사용되는 개념에 이름을 정의한 것. *비슷한 문제 상황을 해결했던 해결책을 잘 기억하고 다시 적용할 수 있다면 유용할 것이다. * 동료 개발자들과 잘 공유하기 위한 방법이 곧 ‘이름’을 지어주는 것이다. 소프트웨어 공학에서 디자인 패턴(Design pattern)은 프로그램 개발 시에 자주 부닥치는 애로 상황에 대한 일반적이고 재사용 가능한 추상화된 해결책이다. 소프트웨어 공학적으로 디자인 패턴은 패러다임과 알고리즘과는 다르다. OOP 패러다임으로 개발을 하든, 함수형 프로그래밍 패러다임으로 개발을 ..

소프트웨어 공학 2021.08.22 0

[알고리즘] 2차원 배열의 회전

배열 회전 알고리즘. 노가다 회전 def rotate(key, N): def getNewValue(i, j, x, y): key[j , N-i-1] = key[i ,j] if (i == x and j == y): return getNewValue(N-j-1, i, x, y) for i in range(0, int(N/2)): for j in range(i, N-i-1): print(i,j ) tmp = key[i,j] getNewValue(N-1-j, i, i, j) key[j, N-1-i] = tmp ZIP을 사용한 깔끔한 회전 def zip_rotate(original): rotated = np.array(list(zip(*original[::-1]))) return rotated numpy를 이용해..

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

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

[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] 정규표현식

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

Java 2022.07.25 0

[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

[D3] D3.js 튜토리얼 정리

D3.js D3은 데이터 기반 문서(Data-Driven Documents) SVG, HTML, CSS를 이용해 웹 브라우저에 맞춤형 데이터 시각화를 생성하기 위한 오픈소스 Protovis는 정적 시각화, D3은 상호작용, 전환 및 변환에 중점. 전역 JavaScript 개체 d3을 정의 D3의 기능 웹 표준 사용 데이터 기반 DOM 조작 데이터 기반 elements 동적 속성 시각화 유형 맞춤형 시각화 전환(transition) 상호작용 및 애니메이션(duration, delay, easy) D3의 장점 모든 JS 프레임워크와 함께 사용 가능. D3는 데이터에 중점을 두고 있으므로 데이터 시각화에 유리. D3는 오픈 소스기 때문에 소스 코드로 작업하고 고유한 기능 추가가 가능 웹 표준과 함께 작동하므로..

d3.js & three.js 2022.07.24 0

[Git] Reset --soft, --mixed, --hard

자꾸 할때마다 헷깔려서 이번에 깔끔하게 정리.. reset --soft A A브랜치로 돌아가는데(repository 초기화) 기존에 add했던 코드들이 staged 된 상태로 그래도 넘어간다. 즉 reset으로 돌아가는 A버전과 내가 작업했던 작업물들을 합쳐 새로운 버전을 만들 필요가 있을 때 사용한다. reset --mixed A A브랜치로 돌아가는데 기존에 add했던 staging area가 추가로 reset된다. 즉 A로 돌아가면서 working directory만 유지되며 현재 작업물을 지우긴 싫고 이전버전에 이걸 add할지말지 결정해야 할 때, 단순 commit 실수를 했을 시 사용한다. reset --hard A A브랜치로 돌아가는데 repository, staging area, working..

GitHub&Git 2022.05.11 0

[백준][Python] 17825 주사위 윷놀이

움직이는 말의 조합 2^20승에 대해 각각 10번의 이동을 조사하며 point연산. 중요로직은 section을 나누어 이동시키는 것.(shortcut) 이미 말이 있는경우 불가능처리시키는 것. import sys input = sys.stdin.readline def calculate(): global result # 각 플레이어의 구간, 위치정보 players = [[0, 0] for _ in range(5)] # 각 경우의 수에서 포인트의 합 sum_points = 0 # 1턴 부터 10턴까지 실행. for i in range(1, 11): now = turns[i] section, pos = players[now] if section == -1: return else: pos += dice[i] #..

백준 2022.02.24 0

[BOJ][Python] 17822 원판돌리기

오랜만에 구현문제를 풀어보았습니다. 회전은 k를 M주기로 나눈 나머지만큼 한번에 돌렸고 회전이 끝난 후엔 각 지점을 bfs로 추적하며 같은 부분을 제거시켰으며 제거가 없는 시점에서는 각 부분을 조사해 평균치보다 크거나 작으면 보정치를 증감해주었습니다. import sys input = sys.stdin.readline from collections import deque def rotate(i, d): new_board = [] if d: for n in range(k, M): new_board.append(round_boards[i][n]) for n in range(k): new_board.append(round_boards[i][n]) else: for n in range(M - k, M): new..

백준 2022.02.21 0

[백준][Python] 18869 멀티버스 : 좌표압축

hashmap에 tuple로 조합수를 구하는 것까지는 접근했는데 set으로 압축시키는 것은 생각을 못했음. 이러면 결국 tuple에 각 순위값이 들어가게 되는데 동일한 요소의 경우 묶여서 사라지기때문에 순위값의 갯수가 적어져 일일히 비교할 필요가 없어짐. 정렬과 indexing을 같이 사용해서 크기 비교를 해야할 때 유용하게 쓸 수 있을 것으로 보임 import sys input = sys.stdin.readline from collections import defaultdict m, n = map(int, input().split()) universe = defaultdict(int) for _ in range(m): planets = list(map(int, input().split())) keys ..