[프로그래머스][Python] 2018카카오블라인드1차: 캐시

내풀이. deque하면 pop안에 인덱스가 안들어 간다는걸 몰랐다. 그래서 결국 그냥 큐로 바꿈. def solution(cacheSize, cities): cache = [] total_cost = 0 for city in cities: lo_city = city.lower() if lo_city not in cache: cache.append(lo_city) total_cost += 5 if len(cache) > cacheSize: cache.pop(0) else: cache.append(cache.pop(cache.index(lo_city))) total_cost += 1 return total_cost 남의 코드 볼 것 :maxlen으로 크기제한, remove로 바로 없애기. # 남의 풀이 de..

programmers 2021.09.02 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

[Programmers][Python] 카카오2020블라인드 가사검색

Trie 역방향, 정방향검색, 길이별 검색. class Node: def __init__(self): self.child = {} self.count = 0 class Trie: def __init__(self): self.root = Node() def insert(self,word): node = self.root for char in word: if char not in node.child: node.child[char] = Node() node.count += 1 node = node.child[char] def startswitch(self,prefix): node = self.root for char in prefix: if char=='?': return node.count if char n..

programmers 2021.09.05 0

[SWEA][Python] 1223 계산기2

후위표기식 변형 및 연산 계산기 2지만 사실 3도 풀리게 짰다. 아직 isp, icp 손에 잘 안익음/../ def calculate(post_ex): n = len(post_ex) stack = [] for i in range(n): # 숫자면 stack if post_ex[i].isdigit(): stack.append(post_ex[i]) else: # 곱하기 나오면 두개빼서 곱하고 다시 넣음 if post_ex[i] == '*': stack.append(int(stack.pop()) * int(stack.pop())) # 더하기 나오면 두개 빼서 더하고 다시 넣음 elif post_ex[i] == '+': stack.append(int(stack.pop()) + int(stack.pop())) e..

swexpertacademy 2021.08.24 0

[알고리즘] 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] 16163 #15164번 제보

기존 마나커 탐색에 1. 중심이 #이 아닐때(크기1짜리 펠린드롬) 2. 반지름 갱신시 #을 뺀 반지름의 크기만큼 펠린드롬수 추가 3. 범위 확장 시 확장된 범위가 #범위가 아니면 펠린드롬 추가 import sys input = sys.stdin.readline def manacher(string): n = len(string) a = [0] * n # i번째 문자를 중심으로 하는 가장 긴 팰린드롬 반지름 크기. c = 0 # 중심점(center) 초기화 r = 0 # 시작점에서 가장 먼 반경(펠린드롬 끝나는 인덱스중 가장 큰 값.) answer = 0 for now in range(n): if string[now] != '#': answer +=1 # i번째 문자가 now 아래쪽에 있는 문자를 중심으로 ..

백준 2021.08.18 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] 20056 마법사상어와 파이어볼 : BFS 구현

https://www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net fireball data를 어떻게 다룰것이냐? 나는 deque를 써서 반복문을 진행했고 중간에 이동연산은 dictionary를 이용해 각 속성을 모아줬다. 한번에 통과. import sys input = sys.stdin.readline from collections import deque def bfs(): cnt = 0 while fireballs: fi..

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

[Computer Structure] 고정소수점 & 부동 소수점

고정 소수점 & 부동 소수점 컴퓨터에서 '실수'를 표현하는 두 가지 방식 이진기수법 십진법은 10^n에 해당하는 수가 될때마다 자릿수가 올라간다면 2진수는 2^n에 해당하는 수가 될때마다 자릿수가 올라간다. 10진수를 2진수로 바꾸는 방법은 다음과 같다. 10진수를 1이 될때까지 계속 2로 나눠가면서 나머지를 구하고 밑에서부터 거꾸로 읽으면 된다. 그럼 소수점이 붙어있는 수는 어떻게 2진수로 변환할까? 정수부의 반대로 2를 곱해주며 1이나 0을 뽑아내고 0이 나오면 종료한다. 결과를 밑에서부터가 아니라 위에서 부터 읽어준다 ex.) 0.625x2 = 1 + 0.25, 0.25x2 = 0+ 0.5, 0.5x2 = 1 + 0.0 이를 위에서 부처 읽어주면 0.101이된다. 고정 소수점(Fixe..

컴퓨터 구조 2021.08.29 0

[SW 공학] SW개발절차(feat. 요구분석, 설계론 등)

개발 프로세스의 목표는 생산성 1. 요구분석과 정의 요구사항 분석 정의 시스템 목표를 확립하는 과정을 요구사항 분석과정이라 하며 요구사항 분석은 행동을 취하기 전 문제에 대하여 연구하는 것을 말한다. 요구사항 분석은 시스템이 만족시켜야 할 요구사항의 발견, 정제, 모델링, 그리고 명세화하는 과정 요구사항 분석은 새롭게 만들고자 하는 시스템의 명세를 만들어내는 과정으로 시스템이 만족시켜야 할 기능, 성능, 그리고 다른 시스템과의 인터페이스 등을 규명한다. 요구사항 분석의 최종 산출물은 사용자의 요구사항 명세서 (Requirements Specification)로, 기능 명세서(Function Specification) 또는 목표 문서(Target Document)라고도 부른다. 분석의 특징 소프트웨어 시스..

소프트웨어 공학 2021.08.22 0

[백준][Pyhton] 13275 14444 가장 긴 펠린드롬 부분 문자열

마나커 알고리즘의 핵심은 #을 삽입해 짝수 펠린드롬에 대비하는것, 중심점과 반지름 a배열의 관리. a배열의 관리는 r과 현재 인덱스now값에 의거해 관리되며 r과c값은 펠린드롬 범위 내 외에서 출발지점 인덱스 0에서 얼마나 멀어졌냐에 따라 관리된다. import sys input = sys.stdin.readline def manacher(string): n = len(string) a = [0] * n # i번째 문자를 중심으로 하는 가장 긴 팰린드롬 반지름 크기. c = 0 # 중심점(center) 초기화 r = 0 # 시작점에서 가장 먼 반경(펠린드롬 끝나는 인덱스중 가장 큰 값.) for now in range(n): # i번째 문자가 now 아래쪽에 있는 문자를 중심으로 하는 팰린드롬 범위 밖의..

백준 2021.08.18 0

[SWEA][Python] 3143 가장 빠른 문자열 타이핑

문자열 매칭 연습하기위해 kmp사용했고 사실 그냥 패턴을 기준으로 split하거나 replace로 변경시켜주면 더 쉽다. import sys sys.stdin = open('input.txt') def make_failure_function(p): failure_function = [0] * (len(pa)) counter = 0 for idx in range(1, len(p)): while counter > 0 and p[counter] != p[idx]: counter = failure_function[counter-1] if p[counter] == p[idx]: counter += 1 failure_function[idx] = counter return failure_function def kmp..

swexpertacademy 2021.08.17 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

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

[백준][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