전체 글

전체 글

    [알고리즘] 간단하지만 알면 좋은 최적화들

    알고리즘 문제를 풀면서 최적화에 신경을 써야할 때가 있다. (시간이나 메모리를 줄이는 것이 중요한 B형처럼..) 1. for문의 ++i와 i++ 차이 for(int i = 0; i < 1000; i++) { ... } for(int i = 0; i < 1000; ++i) { ... } 내부 operator 로직을 보면 i++은 한번더 연산을 거친다. 따라서 ++i가 미세하게 조금더 빠르다. 하지만 요즘 컴파일러는 거의 차이가 없어지게 되었다고 한다. 2. if/else if vs switch case '20개의 가지 수, 10억번의 연산이 진행되면?' if/else 활용 : 약 20초 switch case : 약 15초 switch case가 더 빠르다. (경우를 찾아서 접근하기 때문에 더 빠르다) if..

    [Spring Boot & React] Polling 웹애플리케이션 만들기 - 2부

    [Spring Boot & React] Polling 웹애플리케이션 만들기 - 2부 1부 : 프로젝트 생성 및 기본 도메인 모델과 레포지토리 생성 최종적으로 만들어지는 페이지는 아래와 같다. 지난 시간에 이어서, 이번에는 JWT 인증과 함께 Spring Security 구성 및 로그인과 회원가입에 대한 API를 만들어보도록 하겠다. 처음 접하면 상당히 내용이 어렵고 복잡해보인다. 일단 진행과정을 익히며 익숙해지도록 노력해보자! Spring Security와 JWT를 통한 사용자 인증 구축하기 사용자가 웹 애플리케이션에 회원가입하고, 로그인할 수 있는 API를 만들 것이다. 우선 진행하기에 앞서, 어떤 식으로 인증과정을 설계할건지 요약해보자 - 새로운 사용자를 Full Name, UserName, Emai..

    [Spring Boot & React] Polling 웹애플리케이션 만들기 - 1부

    [Spring Boot & React] Polling 웹애플리케이션 만들기 - 1부 Spring Boot와 React를 연동하여 Polling 웹앱을 만들어보려고 한다. CalliCoder에서 진행하는 Tutorial을 참고해서 다시 재구성해봤다. (링크) 최종적으로 만들어지는 페이지는 아래와 같다. [구성] Back-End - Spring Boot (Spring Security와 JWT 인증을 활용한 백엔드 서버 구축) - Database는 MySQL 활용 (JPA) Front-End - React 스프링 부트 프로젝트 생성하기 http://start.spring.io/에 접속해서 프로젝트를 생성해보자 자신의 프로젝트에 맞게 설정해주면 된다. 기본적으로 Dependencies는 Web, JPA, MyS..

    [알고리즘] 그래프(Graph)에서 사이클(Cycle) 찾기

    [알고리즘] 그래프(Graph)에서 사이클(Cycle) 찾기 사이클을 찾기 위해서는 DFS를 활용한다. (정점 : v, 간선 : e) - visited[] : 점들의 방문여부가 저장된 배열 - recur[] : v가 지금까지 방문한 점이 저장된 배열 for(v 수 만큼) { dfs(v, visited, recur) } DFS 수도코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 boolean dfs(v(a), visited, recur) { visited[v(a)] = true recur[v(a)] = true for(v(a)와 연결된 점의 수만큼) { b = 연결된 점 if(!visited[b] && dfs(v(b), visited, recur){ // b가 방문상태..

    [알고리즘] XOR 비트 연산을 활용하기

    [알고리즘] XOR 비트 연산을 활용하기 비트 연산을 활용해서 문제에 적용하면 상당히 효율적으로 코딩이 가능한 경우가 있다. 특히 코딩테스트와 같이 문제를 풀 때 비트 연산을 활용하면 좋다. 이번에 살펴볼 예시는 보통 네이버나 카카오 등 프로그래머스를 이용해 코딩테스트를 보게 되는데, 테스트 환경에서 연습해보는 1번 문제로 등장하는 유형이다. 직사각형의 3개 점이 주어진다. 나머지 하나의 점의 좌표를 구하라. (직사각형은 항상 평행한 상태) ex) (2, 0) (6, 0) (6, 6) 정답 : (2, 6) 다양한 방법을 이용해 푸는 것이 가능하지만, 가장 신박했던 방법은 비트연산을 활용해 푸는 것이었다. XOR은 입력 값 중 하나만 true일 때 true를 리턴해준다. 따라서 주어진 3점의 x좌표와 y좌..

    React + Spring Boot 연동하여 환경 구축하기

    React + Spring Boot 연동하여 환경 구축하기 프로젝트 진행에 앞서 연습해보자! Front-end : React Back-end : Spring Boot 스프링 부트를 통해 서버 API 역할을 구축하고, UI 로직을 React에서 담당 ( React는 컴포넌트화가 잘되어있어서 재사용성이 좋고, 수많은 오픈소스 라이브러리 활용 장점 존재) 개발 환경도구 (설치할 것) - VSCode : 확장 프로그램으로 Java Extension Pack, Spring Boot Extension Pack 설치 (메뉴-기본설정-설정에서 JDK 검색 후 'setting.json에서 편집'을 들어가 `java.home`으로 jdk 경로 넣어주기) "java.home": "C:\\Program Files\\Java\..

    삼성 상시 SW 역량테스트 B형 후기

    삼성 상시 SW 역량테스트 B형 후기 2019년 7월 27일, 삼성 상시 SW 역량테스트 B형 시험이 있었다. 장소는 수원에 있는 영통역 근처 삼성전자 인재개발원.. 엄청 멀어서 오고가고에 지쳤다. 인재개발원 입구 마치 군대 위병소에 들어가는 것 같았다;; 신분증으로 시험보는 사람이 맞는지 한명씩 확인절차가 이루어진 뒤 갈 수 있다. 건물도 엄청 크고 깨끗하다. 특히 화장실이 너무너무 좋다.. 시험은 13:30 ~ 17:30으로 4시간동안 진행된다. 이 시간동안 주어진 1문제를 다 풀고 제출하면 된다. 나머지는 A형 시험과 모두 똑같다고 생각하면 된다. 확실히 기억은 안나는데, 시작하고 30분 이후였나 1시간 이후부터 퇴실이 가능하다. 먼저 나가는 사람들은 거의 없고 대부분 시간을 채우며 조금이라도 최적..

    [백준 3425] 고스택 (Java, 시뮬레이션)

    [백준 3425] 고스택 (Java, 시뮬레이션) B형 역량테스트를 보기 하루 전이다. 인터넷 상에 추천문제로 나온 고스택 문제를 풀었다. 시뮬레이션이라 문제푸는 감을 익히기에 좋을 것 같다. 문제 : 출처 3425번: 고스택 문제 고창영은 스택을 조금 변형해서 고스택을 만들었다. 고스택은 숫자만을 저장할 수 있고, 다음과 같은 10가지 연산을 수행할 수 있다. 편의상 스택의 가장 위에 저장된 수를 첫 번째 수라고 하고, 그 다음은 차례대로 두 번째 수, 세 번째 수라고 한다. NUM X: X를 스택의 가장 위에 저장한다. (0 ≤ X ≤ 109) POP: 스택 가장 위의 숫자를 제거한다. INV: 첫 번째 수의 부호를 바꾼다. (42 -> -42) DUP: 첫 번째 숫자를 하 www.acmicpc.ne..

    [자료구조/Java] 이진탐색트리 (Binary Search Tree)

    [자료구조/Java] 이진탐색트리 (Binary Search Tree) - 각 노드의 자식이 2개 이하인 트리 - 왼쪽 자식은 부모보다 작고, 오른쪽 자식은 부모보다 큼 노드 삽입 시간 균등 트리 : 노드 개수 N개일 때 O(logN) 편향 트리 : 노드 개수 N개일 때 O(N) 삽입,검색,삭제의 시간복잡도는 트리 높이에 비례함 삭제가 조금 까다로움 (3가지 case) 1. 자식이 없는 leaf 노드면? → 그냥 지우면 끝 2. 자식이 1개인 노드면? → 지워진 노드에 자식을 올리면 끝 3. 자식이 2개인 노드면? - 자식 노드 중에서 삭제할 노드보다 크면서 가장 작은 값 - 자식 노드 중에서 삭제할 노드보다 작으면서 가장 큰 값 편향된 트리(ex. 정렬된 상태인 값을 트리로 만들면 한쪽으로 뻗는다)에서..

    [자료구조/Java] 힙(Heap) 구현

    시간이 지나면 자꾸 까먹는다.. 그래서 다시 정리해봐야겠다 자료구조의 핵심 중 하나인 힙(Heap)에 대해 알아보자 힙(Heap) 완전 이진트리의 일종이다. 반정렬 상태(완전히 정렬된 상태가 아님)이며, 완전 이진트리와는 다르게 중복값이 허용된다. 삽입/삭제는 트리 구조이기 때문에 O(logN)이므로 매우 빠르다. 보통 우선순위 큐가 힙으로 많이 구현되는데, 배열과 리스트보다 효율적이기 때문이다. 힙은 최대힙과 최소힙으로 나누어지고, 최대힙은 부모 노드가 가장 큰 것이며 최소힙은 부모 노드가 가장 작은 것이다. 이를 통해 여러 값 중에서 최소 값이나 최대 값을 빨리 찾을 때 유용하게 이용할 수 있다. 힙 자료구조는 보통 배열을 이용하며, 0번째 인덱스는 편하게 구현하기 위해서 사용하지 않는다. 1번째 인..