전체 글

뭐든 공부하면 언젠간 다 도움이 될거야
아놔 백준에서 node js 숫자받을때 왕짜증남 앞으로 숫자 값을 받을 때 마다 Number을 애용합시다 // readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기 const fs = require('fs') const getInput = (filePath) => { return fs .readFileSync(filePath) .toString() .trim() .split(/\n/); } const input = getInput('/dev/stdin'); // 제출시 여기 '/dev/stdin' 으로 변경 // let arr = input[0].split(' ').map(Number); let arr = []; let n = Number(input[0]); for(let i =1;i..
sort함수는 정렬 기준을 지정하지 않을 경우 기본적으로 각 요소를 문자열로 변환하고 유니코드 코드 포인트 순서에 따라 정렬한다 이는 숫자를 정렬할 때 우리가 일반적으로 기대하는 방식과 다를 수 있다.... 그러니까 [ 1, 2, 3 ] 배열을 arr.sort()로 그냥 돌리면 이때는 문제가 없지만 let arr = [10, 5, 20, 2]; 와 같은 배열을 arr.sort() 함수로 돌리게 되면 [ 10, 2, 20, 5 ] 와 같은 결과를 받아버릴 수 있다 따라서 숫자를 js의 sort함수로 내림차순이나 오름차순을 할 경우에는, 꼭 compare함수를 정의해주어야 한다 arr.sort()돌렸다가 열심히 삽질함.. // readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기 cons..
· 알고리즘
알고리즘 병합정렬은 배열을 정렬하는 효율적인 알고리즘 중 하나이다. 이 알고리즘은 분할 정복을 이용해서 정렬한다! (1) 분할 : 배열을 반으로 나눈다. 이 과정은 배열을 작은 단위의 하위 배열로 계속해서 나누는 과정이다. (2) 정복 : 각 하위 배열을 재귀적으로 정렬한다. 이 정렬은 배열이 충분히 작고 정렬된 상태(length가 1일때까지) 계속 된다. (3) 병합 : 정렬된 하위 배열들을 병합하여 하나의 정렬된 배열을 만든다. 가장 극악의 상황에서도 O(NlogN)의 상황을 보장하는 알고리즘으로 꽤 효율적인 알고리즘이라고 할 수 있다 첨에는 진짜 무슨 소리인지 몰라서 ㅠㅠ 1시간을 넘도록 뚫어져라 쳐다보다가 재귀
회사 리팩토링을 진행하면서 웃긴 상황이 발생됐다 안드로이드 폰에서그냥 직접 url을 접근하면 문제가 따로 안생기는데검색을 통해서 url에 접근하는 경우에이상하게 상단에 250px 만큼 흰색 화면이 생기면서 페이지에 접근이 됐다신기방기 ㅋㅋ 그래서 이 250px가 도대체 어디서 왔는가? 를 찾아보니모바일 자판기 인 것 같은..? 그래서 결론적으로 문제는이동한 페이지에서 뷰포트가 모바일 자판기를 포함한 상태로 인식하다 보니까 css가 박살나서 보이는 상황인것이다 프론트개발자 분이랑 같이 삽질하다가 찾았다https://developer.chrome.com/blog/viewport-resize-behavior?hl=ko Android용 Chrome에 적용될 표시 영역 크기 조절 동작 변경사항에 대비하기  |  ..
import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { // Scanner 객체 생성 Scanner sc = new Scanner(System.in); // 테스트 케이스의 개수 선언 int T = sc.nextInt(); String[] arr = new String[T]; // 문자열 입력받기 for (int i = 0; i < arr.length; i++) { arr[i] = sc.next(); } sc.close(); // 입력받은 문자열을substring으로 0번째 끝번째를 출력한다. for (int i = 0; i < arr.length; i++) { // 만약 입..
Framework Interop Group에서 PSR-0, PSR-1, PSR-2 라는 권장 스타일 가이드를 제시했다 그러니까.. PSR은 결국 PHP 코딩 스타일 컨벤션 개념이다 예전에 입사해서 받은 우리 회사의 PHP 코딩 규칙~ 해서 보다가 PSR? 이라는 말이 있었는데 이제야 정확히 정의를 찾아본다 ;; PSR(Php-FIG Standard Recommendation)은 PHP 표준 권고서의 약어로 특정 기능 또는 스타일에 대한 표준 규칙을 정의한 문서를 나타낸다. PSR-1부터 PSR-4는 아래 내용에 잘 정리되어 있다 https://wikidocs.net/43540 PSR-1 # **1. Overview** - 파일은 태그 ` PHP 코드는 긴 태그 또는 짧은 에코 태그를 사용해야합니다 . 다..
· 알고리즘
트리란? - 트리는 가계도와 같이 계층적인 구조를 표현할 때 사용할 수 있는 자료구조다. - 나무(tree)의 형태를 뒤집은 것과 같이 생겼다. 트리 용어 정리 1) 루트 노드(root node): 부모가 없는 최상위 노드 2) 단말 노드(leaf node): 자식이 없는 노드 트리(tree)에서는 부모와 자식 관계가 성립한다. 3) 관계: 2을 값으로 가지는 노드와 4를 가지는 노드 사이의 관계 4) 깊이(depth): 루트 노드에서의 길이(length) - 트리의 높이(height)는 루트 노드에서 가장 깊은 노드까지의 길이를 의미한다. (상단 그림의 높이는 1) 이진 트리(Binary Tree) - 이진 트리는 최대 2개의 자식을 가질 수 있는 트리를 말한다. 우선순위 큐(Priority Queue..
· 알고리즘
큐란? - 큐(queue)는 먼저 삽입된 데이터가 먼저 추출되는 자료구조 (* 롤할때 말하는 '큐' 도 여기서 나온 뜻 같다!) - 큐를 연결 리스트로 구현하면, 삽입과 삭제에 있어서 O(1) 을 보장할 수 있다. - 연결 리스트로 구현할 때는 머리(head)와 꼬리(tail) 두 개의 포인터를 가진다. 1) 머리(head): 남아있는 원소 중 가장 먼저 들어 온 데이터를 가리키는 포인터 2) 꼬리(tail): 남아있는 원소 중 가장 마지막에 들어 온 데이터를 가리키는 포인터 삽입할 때는 꼬리(tail) 위치에 데이터를 넣는다 삭제할 때는 머리(head) 위치에서 데이터를 꺼낸다 예제) 전체 연산: 삽입 3 – 삽입 5 – 삭제 – 삽입 7 – 삭제 – 삽입 8 – 삭제 – 삽입 2 – 삽입 9 한쪽에선..
· 알고리즘
스택이란? - 먼저 들어온 데이터가 나중에 나가는 자료구조 - 흔히 박스가 쌓인 형태를 스택(stack)이라고 한다. - 우리가 박스를 쌓은 뒤에 꺼낼 때는, 가장 마지막에 올렸던 박스부터 꺼내야 한다. 전체 연산: 삽입 3 – 삽입 5 – 삭제 – 삽입 7 – 삭제 – 삽입 8 – 삭제 – 삽입 2 – 삽입 9 이라면 3 5 3 7 3 3 8 3 3 2 3 9 2 3 의 순서로 풀이할 수 있다 (왜 옆으로 나열이 안돼 ㅠ) 연산? 1. 삽입 : O(1) 2. 추출 : O(1) 3. 최상위 원소 : O(1) 4. empty : O(1)
· 알고리즘
1. 배열(Array) - 가장 기본적인 자료구조 - 여러개의 변수를 담는 공간 장점: 캐시(cache) 히트 가능성이 높으며, 조회가 빠르다. 단점: 배열의 크기를 미리 지정해야 하는 것이 일반적이므로, 데이터의 추가 및 삭제에 한계가 있다. 2. 연결 리스트(Linked List) - 배열과 다르게 크기가 정해져 있지 않고, 리스트의 크기는 동적으로 변경 가능하다. 장점 : 포인터(pointer)를 통해 다음 데이터의 위치를 가리킨다는 점에서 삽입과 삭제가 간편하다. 단점 : 특정 번째의 원소를 검색할 때는 앞에서부터 원소를 찾아야 하므로, 데이터 검색 속도가 느리다. 형태 포인터 : 다음 노드의 메모리 주소를 가리키는 목적으로 사용된다 연결성: 각 노드의 포인터는 다음 혹은 이전 노드를 가리킨다. ..
프흐프좋아
개발자로 살아남기