본문 바로가기

Computer Science36

LeetCode Weekly Contest 272 주말에 딱히 할 것도 없고 해서 이것저것 찾아보다가 릿코드에서 매주 진행하는 알고리즘 문제풀이 콘테스트가 눈에 띄었다. 내가 봤을 때가 콘테스트 시작 15분전이라 부랴부랴 참가 접수해서 참여했다 ㅎㅎ 이번 주는 특이하게 아마존 페이에 인터뷰 기회가 있는 콘테스트였던 것 같다! 뭐 나는 심심풀이로 참여한 거니까 그냥저냥 풀었는데 처음에는 저기 순위권에 있는 괴수들은 뭐하는 사람들인지 궁금했는데 아무래도 릿코드에 있는 문제들을 기반으로 출제돼서 저게 가능한 모양이다. 등수는 문제를 맞춰서 얻은 점수, 맞춘 시간 순으로 우선순위를 부여하는 것 같다. 풀다 보니 승부욕이 생겨서 나름 열심히 했는데 4번을 못 풀었다 ㅠ ㅠ 아이디어가 떠오르지 않아서 30분 정도 남았지만 그냥 포기했다 (배고파서 끈건 비밀..) .. 2021. 12. 19.
HTTP 상태코드 3XX HTTP 상태 코드에는 2XX, 3XX, 4XX, 5XX 등 다양한 케이스가 있다. 그중에 3XX는 Redirection을 하는 상태 코드로 실무에서 자주 사용되는 것 같다. Redirection은 아래와 같은 흐름으로 동작이 되는데, 아래 동작이 빠르게 수행되기 때문에 일반 유저들은 크게 신경 쓰지 않으면 모르고 넘어갈 수 있다. Redirection의 종류 영구 Redirection - 특정 리소스의 URI가 영구적으로 변경된 경우 ex) 위 그림이 영구 Redirection의 예시임 일시 Redirection - 일시적인 변경 ex) 회원가입 후 메인페이지로 이동 등 자주 사용되는 패턴 PRG: Post/Redirect/Get 특수 Redirection - 결과 대신 캐시를 사용 영구 Redirec.. 2021. 12. 19.
LeetCode(릿코드) - Merge Two Sorted Lists 두 개의 정렬된 LinkedList를 하나의 정렬된 List로 병합하는 문제입니다. 예시는 아래와 같습니다. Point 1. 문제에서 주어진 ListNode 클래스를 사용하여 풀이해야 한다. 2. LinkedList의 특징과 Java 주소값 참조 개념에 대해 이해하고 있어야 한다. 처음엔 쉬운 문제라고 생각했는데 거의 1시간이 걸렸다. 자료구조를 제대로 이해하고 있다고 착각하고 있었다는 것을 깨닫게 해준 문제.. /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int.. 2021. 12. 6.
LeetCode(릿코드) - Valid Parentheses 3가지 형태의 괄호로 이루어진 문자열이 input으로 주어질 때, 해당 괄호가 유효한지 검증하는 문제입니다. Point 1. Open bracket이 주어진 이후에는 반드시 같은 형태의 닫는 괄호가 나와야 한다. 2. Open bracket이 모두 닫히지 않은 형태도 고려해줘야 한다. class Solution { public boolean isValid(String s) { boolean answer = true; Stack stack = new Stack(); int idx = 0; while(answer && idx 2021. 12. 5.
LeetCode(릿코드) - Longest Common Prefix 문자열 배열을 input으로 주어질 때, 배열의 모든 원소에 적용될 수 있는 '공통 접두사'를 찾는 문제입니다. 복잡한 아이디어가 필요한 문제는 아닌 것 같습니다. Point 1. 접두사란, 접사(接辭)의 하나로 어떤 낱말 앞에 붙어서 의미를 첨가하여 한 다른 낱말을 이루는 말. 정의에 따라 반드시 0번 인덱스부터 시작해야한다. class Solution { public String longestCommonPrefix(String[] strs) { StringBuilder sb = new StringBuilder(); int minLeng = 201; for(String str : strs) { minLeng = Math.min(minLeng, str.length()); } for(int i=0 ; i 2021. 12. 5.
LeetCode(릿코드) - Two Sum 정수 배열 nums와 정수 target이 input으로 주어질 때, nums안의 2개 element 합이 target과 같은 element의 index를 구하는 문제입니다. 예시는 다음과 같습니다. Point 1. 문제의 답은 오직 한 가지 쌍이며, 같은 element를 두 번 사용하지 않는다. 나는 단순하게 풀이를 했다. Flow 1) 주어진 배열 nums를 정렬한 sortArr에서 합이 target이 되는 element를 탐색 Flow 2) 해당 element의 index를 탐색 class Solution { public static int INF = 987654321; public int[] twoSum(int[] nums, int target) { int[] answer = new int[]{IN.. 2021. 12. 4.
LeetCode(릿코드) - Roman to Integer 로마 숫자가 Input으로 들어오면 이를 10진수로 변환하는 프로그램을 작성하는 문제입니다. 예시는 다음과 같습니다. Point 1. Subtraction은 IV, XC, CD 등의 형태만을 가진다.(IIV, CCM 같은 형태는 없음) 2. 로마 숫자는 내림차순으로 작성되므로 Input 문자열의 가장 뒷부분부터 체크하면 수월하다. import java.util.*; class Solution { public int romanToInt(String s) { Map roman = new HashMap(); roman.put('I', 1); roman.put('V', 5); roman.put('X', 10); roman.put('L', 50); roman.put('C', 100); roman.put('D', .. 2021. 12. 3.
프로세스 상태 먼저 프로세스 상태를 관리하는 스케줄러에 대해 정리해야겠다. 스케줄러는 크게 3가지로 장기, 중기, 단기 스케쥴러가 있다. - 장기 스케줄러(Job Scheduler): 대용량 메모리(디스크 등)에 있는 적재되어있는 프로세스들 중 일부 프로세스를 골라 메모리를 할당하여 바로 실행시킬 수 있는 상태로 변화시킨다. *프로세스 상태 new -> ready - 중기 스케줄러(Swapper): 메모리 여유 공간의 확보를 위해 일부 프로세스에 할당된 메모리를 해제시킨다. *프로세스 상태 ready -> suspended - 단기 스케줄러(CPU Scheduler): Ready Queue에 있는 프로세스를 실행시키고, 실행 중인 프로세스에 I/O나 인터럽트 발생 시 잠시 대기 상태로 변경하고 처리가 완료되면 다시 준.. 2021. 11. 19.
HTTP 메소드 HTTP에서 URI는 자원을 식별하고 메서드는 검색, 수정 등의 행위를 표현하도록 분리되어있다. 주로 사용하는 HTTP 메소드 GET: 자원 조회 조회 조건에 대해 QueryParameter나 QueryString으로 보냄. POST: 요청 데이터 처리, 주로 등록에 사용 메시지 바디를 통해 서버로 요청 데이터를 전달. 주로 신규 자원 등록, 프로세스 처리에 사용. JSON 등 복잡한 형태로 조회 조건을 넘겨야 할 때(GET으로 힘들 때) POST도 사용. PUT: 자원을 대체(덮어쓰기), 해당 자원이 없다면 신규 생성 클라이언트에서 자원 위치를 알고 URI에 지정해줌(POST와 차이점) PATCH: 자원의 수정(일부분만) DELETE: 자원 삭제 어떤 메서드를 사용할지 애매할 때는 POST를 쓰는 게 .. 2021. 11. 17.
HTTP(HyperText Transfer Protocol) HTTP란? World Wide Web(www, w3) 상에서 정보를 주고받을 수 있는 프로토콜. 현재 HTML 문서, 이미지, 동영상 등 모든 데이터 통신에 사용된다. 데이터 통신에는 URL을 활용하여 클라이언트와 서버가 필요 자원을 식별한다. 현재는 HTTP 1.1(TCP) | HTTP 2(TCP) | HTTP 3(UDP) 총 3가지 버전을 상황에 맞게 사용하고 있다. 특징 Connectionless(비연결성) HTTP는 Request를 보내고 Response를 받으면 해당 연결을 종료하기 때문에 요청에 대한 상태를 저장하지 않는다 Stateless(무상태성) HTTP Request와 Response는 독립적으로, 클라이언트와 서버가 통신한 내용(상태)을 저장하지 않는다. 버전별 특징 HTTP 1.1.. 2021. 11. 15.
DB Lock & Blocking Lock이란? Datebase의 Durability(영속성)을 보장하기 위해 사용되는 것이다. 실무에서 DB는 다양한 시스템에서 동시에 접근하게 된다. 동시에 접근하여 데이터를 조작하다보면 필연적으로 데이터의 오류가 발생한다. 이런 상황에 사용되는 것이 바로 Lock. Lock은 하나의 transaction이 완전하게 종료될 때까지 다른 transaction을 막음으로써 요청 처리의 순서를 보장해준다. Lock의 종류는 크게 2가지 1. Shared Lock(= Read Lock) 공유락 데이터를 읽을 때 사용하는 Lock이다. Read transaction이 실행 중일 때 또 다른 Read transaction이 들어오면 동시 접근을 허용한다. 2. Exclusive Lock(= Write Lock) .. 2021. 10. 18.
URI(Uniform Resource Identifier) URI란? Uniform: 리소스 식별하는 통일된 방식 Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음) Identifier: 항목을 구분하는 정보 많이들 헷갈리는 부분이 URL, URN, URI의 차이에 대해 알아보겠습니다. 이름을 보면 그 관계를 파악할 수 있는데 URL: Uniform Resource Locator URN: Uniform Resource Name 각각은 자원(Resource)에 접근하는 방식이 자원의 위치, 이름입니다. URI는 둘 모두를 아우르는 Identifier를 통해 자원을 탐색합니다. 하지만 URN은 실제로 활용되는 경우가 거의 없습니다. 따라서 사람들이 말하는 URI와 URL은 같은 의미로 생각하면 될 것 같습니다! ※참고: https://www.ie.. 2021. 10. 3.