[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

[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

[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

[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

[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

[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 ..

[백준][Python] 17837 새로운게임2

위에서 옮기는 것의 순서만 잘 조절해주면 나머지는 색에 따라 구분만 해주면 된다. import sys input = sys.stdin.readline def move_white(x, y, nx, ny): now = chess[x][y].index(coin) top = len(chess[x][y]) for i in range(now, top): coins[chess[x][y][i]][0] = nx coins[chess[x][y][i]][1] = ny chess[nx][ny].append(chess[x][y][i]) for _ in range(top - now): chess[x][y].pop() def move_red(x, y, nx, ny): now = chess[x][y].index(coin) top =..

백준 2022.01.23 0

[백준][Python] 21610 마법사상어와 비바라기

움직인 구름의 경우 추후 제외하고 구름을 생성하기 위해 set으로 관리. 움직이기 전 구름은 list로 뺐다 넣었다 하면서 관리. 이동은 N의 나머지로 관리 import sys input = sys.stdin.readline N, M = map(int, input().split()) A = [list(map(int, input().split())) for _ in range(N)] moves = [tuple(map(int, input().split())) for _ in range(M)] delta = ((0, 0), (0, -1), (-1, -1), (-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1)) check = ((-1, 1), (1, 1), (-1, -1),..

백준 2022.01.23 0

[백준][Python] 17779 게리멘더링2

단순히 영역을 나누는 문제였습니다. 대각선에 대해 4번 범위 설정이 필요한 문제였습니다. 핵심은 1개씩 늘어나거나 줄어드는 dx, dy설정을 어떻게 할 것인가? 결국 i에서 i의 초깃값을 빼주면 0부터 시작한 다는 것을 알 수 있었습니다. import sys input = sys.stdin.readline N = int(input()) matrix = [list(map(int, input().split())) for _ in range(N)] answer = float('inf') total = 0 for i in range(N): for j in range(N): total += matrix[i][j] for x in range(N - 1): for y in range(1, N - 1): for d1 ..

백준 2022.01.16 0

[백준][Python] 17143 낚시왕

처음에 상어끼리 잡아먹는다는 문장을 못봐서 헤멤. 본 후에는 heap기반 -> 2차원 배열 직접 생성으로 바꿔서 품. import sys input = sys.stdin.readline def move_shark(): new_board = [[0 for _ in range(C)] for _ in range(R)] for x in range(R): for y in range(C): if not board[x][y]: continue t_x, t_y = x, y s, d, z = board[t_x][t_y] total = s if d == 0 or d == 1: s %= 2 * R - 2 while s: if (t_x == R - 1 and d == 1) or (t_x == 0 and d == 0): d ^..

백준 2022.01.13 0

[백준][Python] 11444 피보나치수6 - 행렬의 곱셈

행렬의 곱셈을 연습하는 문제이다. 각 항을 어떻게 표현 할 것인가? 2x2 행렬의 i행 j열의 요소는 두개의 요소의 곱이 두개씩 합해져 들어간다. def matrix_mult(a, b): ret = [[0 ,0], [0, 0]] for i in range(2): for j in range(2): for k in range(2): ret[i][j] += (a[i][k] * b[k][j]) % MOD return ret n = bin(int(input()))[2:] MOD = 1000000007 base = [[1, 1], [1, 0]] answer = [[1, 0], [0, 1]] for i in range(1, len(n) + 1): if n[-i] == '1': answer = matrix_mult(a..

백준 2021.12.19 0

[백준][Python] 11404 플로이드

플로이드 워셜 기본문제 각 기점에 대해 모든 경로를 전수조사한다. 한번당 기점 하나를 거치는 경로이다. import sys input = sys.stdin.readline n, m = int(input()), int(input()) bus_datas = [[float('inf')] * n for _ in range(n)] for _ in range(m): a, b, c = map(int, input().split()) bus_datas[a - 1][b - 1] = min(bus_datas[a - 1][b - 1], c) for k in range(n): bus_datas[k][k] = 0 for i in range(n): for j in range(n): if bus_datas[i][j] > bus_da..

백준 2021.12.19 0

[백준][Python] 2263 트리의 순회

분할 정복 in_order로 root기준 오른쪽 왼쪽을 나누고 post_order로 root를 찾는다. import sys input = sys.stdin.readline sys.setrecursionlimit(10**6) def find_tree(in_left, in_right, post_left, post_right): if in_left > in_right or post_left > post_right: return root = post_order[post_right] root_idx = in_order_idx[root] pre_order.append(root) left_size = root_idx - in_left find_tree(in_left, root_idx - 1, post_left, po..

백준 2021.12.15 0

[백준][Python] 1865 웜홀

시작정점을 어디로 두어야 하는가? 초기 최단거리값을 float('inf)가 아닌 정수로 두어야 하는 이유가 무엇인가? 두가지에 대해 고민해볼 필요가 있는 문제 두 가지 조건에 따라 시작 지점에서 도달 할 수 있는 또는 도달할 수 없는 음수 사이클 판별 가부가 결정된다. import sys input = sys.stdin.readline def bellman_ford(start): dists[start] = 0 for cycle in range(n): for cur_node, next_node, cost in edges: if dists[cur_node] + cost < dists[next_node]: dists[next_node] = dists[cur_node] + cost if cycle == n - ..

[OS] 메모리 관리

이화여대 반효경 교수님의 강의를 보며 정리했습니다. 결론은 메모리관리 영역에서 가상메모리나 swap부분을 제외하고 운영체제의 역할은 미미하다는 것. 메모리접근, 물리 주소 할당등은 MMU나 TLB의 영역이라는 것. 메모리관리 메모리접근, 주소 변환에서 운영체제의 역할은 하나도 없음 전부 하드웨어의 영역. 운영체제는 I / O 접근만 관여함. 주소 논리 주소(Logical Address = virtual address) 프로세스마다 독립적으로 가지는 주소 공간 각 프로세스마다 0번지부터 시작 CPU가 보는 주소는 logical address임 물리 주소(Physical address) 메모리에 실제 올라가는 위치 주소 바인딩 : 주소를 결정하는 것. Symbolic Address -> Logical Add..

운영체제 2021.12.07 0

[codeforce][Python] #690 E2. Close Tuples (hard version)

시간초과가 나오는 code이다. import sys input = sys.stdin.readline from bisect import bisect_right from math import factorial MOD = int(1e9) + 7 for test in range(int(input())): n, m, k = map(int, input().split()) arr = list(map(int, input().split())) arr.sort() done = {} answer = 0 for i in range(n - m + 1): if arr[i] not in done: right = bisect_right(arr, arr[i] + k) done[arr[i]] = right length = done[ar..

[codeforce][Python] #690 E1. Close Tuples (easy version)

map으로 나보다 2큰수의 위치를 저장해둔 후 거기까지 사이의 갯수에서 나포함 3개를 뽑으면 된다. import sys input = sys.stdin.readline from bisect import bisect_left for test in range(int(input())): n = int(input()) arr = list(map(int, input().split())) arr.sort() done = {} answer = 0 for i in range(n - 2): if arr[i] not in done: right = bisect_left(arr, arr[i] + 3) done[arr[i]] = right length = done[arr[i]] - i if length > 2: length -..

codeforce 2021.12.07 0

[codeforce][Python] #690 D. Add to Neighbour and Remove

어떻게 표현할 것인가? 결국 total값의 약수가 되어야지 가능하다. import sys input = sys.stdin.readline for test in range(int(input())): n = int(input()) arr = list(map(int, input().split())) total = sum(arr) candidate = [num for num in range(1, total + 1) if not total % num] for target in candidate: tmp, answer = 0, 0 for num in arr: tmp += num answer += 1 if tmp == target: tmp = 0 answer -= 1 elif tmp > target: break el..

카테고리 없음 2021.12.07 0

[codeforce][Python] #690 C. Unique Number

숫자의 합이 되는 최소 길이의 숫자조합을 구합니다. 최소길이이므로 큰수부터 빼주며 숫자를 만들면 됩니다. 1~45까지의 모든 수는 표현이 가능하다는 것만 이해하면 됩니다. import sys input = sys.stdin.readline for test in range(int(input())): x = int(input()) answer, flag = '', 0 for num in range(9, 0, -1): if x >= num: x -= num answer += str(num) if not x: print(answer[::-1]) break else: print(-1)

codeforce 2021.12.07 0

[codeforce][Python] #690 B. Last Year's Substring

2020을 한번만 제외하고 만들 수 있는지 여부를 확인하는 문제입니다. 중간에 한번밖에 못띄우니 앞, 뒤에 2020의 모든 숫자가 존재해야합니다. import sys input = sys.stdin.readline for test in range(int(input())): n = int(input()) s = input().rstrip() answer = '2020' if s[0] + s[-3:] == answer or s[:2] + s[-2:] == answer or s[:3] + s[-1] == answer or s[:4] == answer or s[-4:] == answer: print("YES") else: print("NO")

codeforce 2021.12.07 0

[Programmers][Python][2021 카카오 인턴십] 표 편집

우선순위 큐 두개를 이용해 가운데값을 k로 운용했습니다. 마지막에 left를 right로 굳이 안옮겨도됐을텐데 조금 아쉽습니다. 또 set을 썼으면 좀 더 출력부분이 깔끔한 반복문으로 처리됐을 것 같습니다. 다른 분들은 연결리스트를 구현하신분들이 많았습니다. from heapq import heappop, heappush def solution(n, k, cmd): left, right, delete = [-i for i in range(k-1, -1, -1)], [i for i in range(k, n)], [] for command in cmd: c, *num = command.split() if c == 'U': cnt = int(num.pop()) for _ in range(cnt): heappu..

programmers 2021.11.14 0

[Django] ORM 성능 최적화 N + 1 Problem

ORM이란 Object Relation Mapper 객체와 관계형 data를 자동으로 매핑해주는 것. 객체를 통해 간접적으로 database data를 다룬다. ORM의 장점 객체지향적인 코드로 인해 더 직관적이고 비즈니스 로직에 더 집중 할 수 있게 해준다. 재사용 및 유지보수 용이 DBMS에 대한 종속성이 줄어든다. ( MySQL -> PostgreSQL로 바꿔도 금방 테이블 생성 가능.) ORM의 단점 ORM으로만 완벽한 서비스를 구현할 수 없다. 프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다. 프로젝트의 복잡성이 크면 구현하는 난이도가 상승한다. N + 1 Problem django ORM은 Lazy-Loading 방식 ORM에서 명령을 실행할 때마다 데이터베이스에서 데..

Django&Python 2021.11.10 0

[Codeforce][Python] #702 G. Old Floppy Drive

이거 cycle을 산출하는 공식이 이해가 안됨. 이번주 내로 해결할 예정 import sys input = sys.stdin.readline from bisect import bisect_left # 풀이 참고했는데 for test in range(int(input())): n, m = map(int, input().split()) arr = list(map(int, input().split())) prefix_sum, idxes, idx, total = [], [], 0, 0 for num in arr: total += num if not prefix_sum or prefix_sum[-1] < total: prefix_sum.append(total) idxes.append(idx) idx += 1 x ..

[Codeforce][Python] #702 F. Equalize the Array

Counter map을 만든 후 set에 조사할 count들을 모은 후 순회하며 그 cnt보다 크면 cnt에 맞춰주고 작으면 0에 맞춰주는 식으로 풀었습니다. import sys input = sys.stdin.readline from collections import defaultdict for test in range(int(input())): n = int(input()) arr = list(map(int, input().split())) counter = defaultdict(int) for num in arr: counter[num] += 1 candidate = set() for target in counter.values(): candidate.add(target) answer = float..

codeforce 2021.11.07 0

[Codeforce][Python] #702 D. Permutation Transformation

분할시키면서 실제 subtree도 분할시켰습니다. import sys input = sys.stdin.readline def make_tree(depth, a): if not a: return a max_num = 0 for idx, num in enumerate(a): if max_num < num: max_idx = idx max_num = num answer[dic[max_num]] = depth make_tree(depth+1, a[:max_idx]) make_tree(depth+1, a[max_idx+1:]) for test in range(int(input())): n = int(input()) arr = list(map(int, input().split())) dic = {num: idx f..

codeforce 2021.11.07 0

[Codeforce][Python] #702 E. Accidental Victory

heap으로 값이 작은것부터 정렬 시킨 뒤 누적합과 내 값을 비교해가며 왕이될 수 있는 값을 구해갔습니다. import sys input = sys.stdin.readline from heapq import heappop, heappush for test in range(int(input())): n = int(input()) arr = list(map(int, input().split())) heap = [] for idx, num in enumerate(arr): heappush(heap, (num, idx)) total, answer = 0, [] while heap: num, idx = heappop(heap) if total >= num: answer.append(idx + 1) else: an..

codeforce 2021.11.07 0

[Codeforce][Python] #702 B. Balanced Remainders

카운팅 해준 후 넘치는거 모자란곳에 계속 옮겨줬습니다. import sys input = sys.stdin.readline def check(d): pivot = d[0] for i in range(1, 3): if d[i] != pivot: return True return False def move(over, d): global answer for i in range(3): if not over and d[i] > n // 3: pivot = d[i] - (n // 3) over.append((i, pivot)) d[i] -= pivot elif over and d[i] < n // 3: idx, num = over.pop() if idx < i: dist = num * (i - idx) else: ..

codeforce 2021.11.07 0