[알고리즘] 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..

[Java] Java의 main() 메서드

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

Java 2022.07.28 0

[알고리즘] 문자열 매칭 3종세트 KMP, 보이어무어, 라빈카프

고지식한 매칭 text = 'ABABCA' for i in range(len(text)-len(target)): for j in range(len(target)): if text[i+j] == target[j]: j+=1 else: break print('Identified') break KMP 알고리즘.(시작위치 후보를 잡아놓자) 불일치가 발생한 텍스트 스트링의 앞 부분에 어떤 문자가 있는지를 미리 알고 있으므로, 불일치가 발생한 앞 부분에 대하여 다시 비교하지 않고 매칭을 수행. 패턴을 전처리하여 배열 next[M]을 구해서 잘못된 시작을 최소화함. next[M]: 불일치가 발생했을 경우 이동할 다음 위치 패턴내에서 반복하는 구간이 있을것이라는 전제.. 하지만 없다면 무의미. 하지만 패턴이 길다는 전..

[SWEA][Python] 4012 요리사

조합을 dfs로 짜고, 조합에 속한 요소와 속하지 못한 요소간 차이를 비교. 삼성기출 스타트와 링크. 웰노운 def choose_parts(cur_node, cnt): global min_gap if cnt == N // 2: S1, S2 = 0, 0 for i in range(N - 1): for j in range(i + 1, N): if check[i] and check[j]: S1 += S[i][j] + S[j][i] elif not check[i] and not check[j]: S2 += S[i][j] + S[j][i] min_gap = min(min_gap, abs(S1 - S2)) for next_node in range(cur_node, N): if not check[next_node]:..

swexpertacademy 2021.10.12 0

[SW 공학] 소프트웨어란? 소프트웨어의 공학적 특징

소프트웨어 공학 소프트웨어는 상품. 공학은 좋은 상품을 낮은 가격에 계획대로 만들기 위한 방법론. 소프트웨어란? 단순 프로그램이 아닌 개발, 운용, 보수에 필요한 모든 관련 정보(설계문서가 가장 큰 비중) 설계, 개발과정에서 비용이 많이들고 완제품 생산은 비교적 저비용 소프트웨어엔 물리적인 부품이 없기 때문에 신뢰도의 결정은 생산과정이 아닌 설계과정에서 측정 결함을 설계과정의 테스팅으로 찾아내는 형식.(물리적 검출 불가) 소프트웨어의 특징 복잡성 (complexity) - 수 많은 내부요소들이 있어 상호작용이 많고 복잡하다. 문제가 무엇인지, 요구가 무엇인지 잘 정의하기 힘들다. 요구되는 사항이 서로 상충되어 설계가 어렵다. 순응성 (conformity) - 요구나 환경, 데이터에 따라서 적절하게 변형된..

소프트웨어 공학 2021.08.22 0

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

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

practivceAlgorithm 2021.07.10 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

[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

[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

[백준][Python][2021 하반기 삼성 코딩테스트] 23291 어항정리

좀 무식하게 푼 느낌이 없잖아 있습니다. 달팽이 거꾸로 파고들면서 그렸습니다. 빈칸은 -1로 표기 빈칸 없을때와 빈칸이 있을 떄 1열로 펼치는 순서가 다릅니다. import sys input = sys.stdin.readline from collections import deque # 달팽이를 만든다. 시작좌표는 def make_snail(): row, col = n, n if n**2 - N >= n: col -= 1 matrix = [[0] * col for _ in range(row)] q = deque() q.append((row - 1, col - 1, 0)) blank_cnt = row * col - N start = N - 1 while q: x, y, d = q.popleft() matri..

[JS] 검색어 자동완성 구현시 change와 keyup event를 같이 쓰는 이유

3. events const searchInput = document.querySelector(".search"); const suggestions = document.querySelector(".suggestions"); searchInput.addEventListener("change", displayMatches); searchInput.addEventListener("keyup", displayMatches); search클래스를 가진 input box가 변하거나 key가 눌릴때마다 displayMatches를 불러옵니다. keyup은 키보드를 이용한 입력만 감지함. (마우스 클릭으로 붙혀넣기하거나 자동완성 단어를 클릭해서 입력되는 이벤트 인식x) change는 외부를 눌렀을때만 인지함. 키보드 ..

JavaScript 2021.10.25 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를 이용해..

[Web] 웹 접근성과 웹 표준, 웹 개방성

접근성? 접근성의 의미와 웹 개발에 접근성을 적용하는 방법을 학습합니다. 모든 사용자가 웹사이트에 액세스할 수 있고 유용하게 활용할 수 있도록 하는 방법을 학습합니다. 개발에 미치는 영향을 최소화하면서 기본적인 접근성을 포함하는 방법을 학습합니다. 사용 가능한 HTML 기능과 이런 기능을 사용하여 접근성을 개선하는 방법을 학습합니다. 세련된 접근성 환경을 만들기 위한 고급 접근성 기법에 대해 학습합니다. 접근성을 한마디로 설명하긴 어렵지만 구현하기 어렵게 만들 필요없음을 알면 된다. 원활한 엑세스, 강력한 인터페이스. 장애가 있는 사용자뿐 아니라 모든 사용자가 더욱 즐거운 마음으로 간편하게 사용할 수 있는 인터페이스의 제작. 접근성이란? 어떤 사이트가 접근가능하거나 엑세스 가능하다고 할때 그 사이트의 콘..

webDeveloper 2021.07.28 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

[JS30] 6. Type Ahead 추가공부. 비동기 API호출 fetch, Promise, async await, 정규표현식 Regexp

fetch 콜백함수 : 나중에 call하는 방법으로 순서를 지정해주는 비동기 처리. JavaSecipt, API, Markup을 근간으로 한 JAM stack. 과거처럼 서버단에서 API를 호출해주기 보다 Client에서 직접 API 호출하는 경우가 많아짐. 브라우저에서 직접 비동기로HTTP통신을 하는 Ajax fetch 함수는 원격 API를 간편하게 호출할 수 있도록 브라우저 내장 함수. fetch이전에는 request, axios, jQuery 라이브러리. node.js에서는 node-fetch나 unfetch 라이브러리. IE에서는 지원 안함. 사용법 fetch(url, options) .then((response) => console.log("response:", response)) .catch(..

JavaScript 2021.10.25 0

[SWEA][Python] 5251 최소 이동 거리

최소 이동거리 문제로 인접리스트가 주어져 다익스트라로 풀이했습니다. from heapq import heappush, heappop def dijkstra(start): heap = [] dists[start] = 0 heappush(heap, (0, start)) while heap: cur_dist, cur_node = heappop(heap) for next_node, next_dist in graph[cur_node]: dist = cur_dist + next_dist if dists[next_node] > dist: dists[next_node] = dist heappush(heap, (dist, next_node)) for test in range(1, int(input()) + 1): N, ..

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

[백준][Python] 17069 17070 파이프 옮기기1, 2

https://www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net 파이프가 대각선으로 움직일때 벽을 긁으면 안된다. 즉 벽이있으면 대각선 처리를 하지 않는다. import sys input = sys.stdin.readline N = int(input()) house = [list(map(int, input().split())) for _ in range(N)] # 오른쪽에서 오거나 왼쪽에서 오거나 대각선으로 오는 경우의 dp dp = ..

백준 2021.09.15 0

[백준][Python] 10000 원 영역

라인 스위핑. 큰걸 기준으로 작은걸 감싸냐 안감싸냐 왼쪽이 겹치면 재귀로 오른쪽 이 겹쳐지는 원이 나올때까지 재귀(큰 원 안에 원이 몇개 겹치나 조사하기 위함) import sys from bisect import bisect_left input = sys.stdin.readline sys.setrecursionlimit(400000) def next_circle(cur_c,next_c): global cnt if circles[cur_c][1] == circles[next_c][1]: cnt += 1 return tmp = bisect_left(circles,(circles[next_c][1],)) if tmp == len(circles): return if circles[tmp][0]==circles..

백준 2021.09.08 0

[백준][Python] 2571 색종이3

최초풀이 : 브루트포스. 시작지점, 종료지점 정해놓고 안에 0있으면 연산 포기 개선풀이 : stack이용 열, 행순회하며 기록해둔 높이값을 기반으로 해 높이가 높은 직사각형부터 연산. 최초풀이 import sys input = sys.stdin.readline def find_rectangle(x,y): max_size = 100 for i in range(100): if x+i >100: break for j in range(100): if y + j > 100: break max_size = max(max_size,calculate_area(x,y,x+i,y+j)) return max_size def calculate_area(x,y,h,w): cnt = 0 for i in range(x,h+1): ..

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

[Django] 배경이미지 추가하기

첫번째 장고 앱 작성하기, part 6 앱의 모양과 느낌을 원하는대로 바꿔보세요 특별한 것은 정적 파일을 static 디렉토리에 모아 관리한다는 것 이외는 없다. 정적파일을 저장할 static 리렉토리 디렉토리를 지정함은 네임스페이싱을 통해 파일을 구별짓기를 원한다는 의미이다.(이름이 동일한 다른파일과) {% load static %} static 탬플릿 태그는 정적파일의 절대경로 URL을 생성한다. 배경 이미지 추가하기. images 서브 디렉토리 추가 * { padding: 0; margin: 0; box-sizing: border-box; } ul { font-family: 'Open Sans', sans-serif; font-family: 'Roboto', sans-serif; background..

Django&Python 2021.08.27 0

[백준][Python] 21939 문제 추천 시스템

핵심은 이미 푼 문제를 각 힙에서 제거하는 매커니즘. import sys input = sys.stdin.readline from heapq import heappop,heappush from collections import defaultdict N = int(input()) min_heap = [] max_heap = [] in_list = defaultdict(bool) for _ in range(N): P, L = map(int, input().split()) heappush(min_heap,[L,P]) heappush(max_heap,[-L,-P]) in_list[P] = True M = int(input()) for _ in range(M): command = input().split() if..

백준 2021.08.26 0

[JavaScript] JS의 비동기처리.

JS의 비동기 처리방식 동기 / 비동기 처리 동기(Syncronous)는 먼저 시작한 작업이 끝날 때 까지 다른 작업을 할 수 없다. 비동기(Asyncronous)는 동시에 여러가지 작업을 처리하며 기다리는 과정에서 다른 함수 호출이 가능하다. 비동기 처리의 예 다음과 같은 작업들은 주로 비동기적으로 처리하게 된다. Ajax Web API요청 : 화면을 렌더링해야하는데 서버쪽에서 응답을 해주기까지 마냥 대기할 수 없다. 비동기적으로 처리한다. Ajax function getData() { let data; $.ajax({ type: 'post', url: 'https://devlibrary00108.tistory.com/', data: { seungjoo:zzang, }, s..

JavaScript 2021.08.17 0

[알고리즘] 슬라이딩 윈도우

투포인터는 연속 구간의 길이가 가변적으로 변할 때 O(2*N)으로 풀도록 도와줌. 슬라이딩 윈도우는 구간의 크기가 고정일때. 둘다 start, end 포인트 사용(슬라이딩 윈도우는 end가 그냥 배열 포인터긴 함.) 하지만 둘다 연속적인 값들을 이용해 풀어나가는 한계가 있음. 기존 배열의 구간합 구하는 코드 배열 크기에서 구간의 길이k만큼의 모든 배열의 합을 순회하며 계산. import sys def max_sub_array(arr, k): maxsum = -sys.maxsize - 1 arraysize = len(arr) for i in range(arraysize - k + 1): current_sum = 0 for j in range(i, i + k): current_sum += arr[j] max..

[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

[SSAFY] 싸피 6기 서울 비전공 최종 합격 후기.

이 블로그는 개인 공부정리용 블로그지만 선배 기수분들에게 받은 유용한 정보들을 다음 기수들에게 물려주고자 합격후기를 작성합니다. 최초 전공인 산업공학에서 생산관리직무를 준비하다가 웹개발에 관심을 갖게 되었고 독학은 4개월정도 진행했습니다. Essay 1번문항에서 SW개발경험을 토대로 한 지원동기 2번문항에서 어떤 구직활동을 왜 어떻게 해왔고 어떤것을 얻었는지를 정리하시면 됩니다. 저는 1번문항 2번문항 둘다 2개의 소문단으로 작성했는데 3개월짜리 스마트제조 국비교육을 들은 내용으로 반을 채웠고 나머지는 혼자 독학을 한 내용과 과정, 어떻게 독학을 통해 성장해왔는지를 어필했습니다. (스마트제조의 어플리케이션단 개발, 사용자중심의 웹서비스개발에 대한 관심도를 드러냈습니다.) 개인적으로 SW개발에 대한 관심도..

후기 2021.07.05 31