전체 글

전체 글

    WAS, Servlet 용어 정리

    WAS, Servlet 용어 정리

    백앤드 공부를 하던 도중 서버와 관련된 헷갈리는 용어가 많아 이번기회에 정리하려 한다. 0. 웹서버 등장 배경 초창기엔 정적 웹사이트만 존재하여 모든 페이지의 모든 내용이 정해져 있어 사용자의 요구를 맞출 수 없었다. 이에 대해 동적인 웹사이트가 등장하였고, 이때 등장한 것이 CGI(Common Gateway Interface)였다. CGI는 서버에서 수행 중인 프로세스 사이에 정보를 주고받는 규칙을 의미했다. CGI는 Perl, C, C++ 등의 언어를 지원하면서 웹 서버를 통해 요청을 받고 실행 결과를 다시 웹 서버를 거쳐 클라이언트의 브라우저로 보낼 수 있는 기능을 지닌다. 하지만 CGI는 각각의 클라이언트의 요청에 대해서 독립적인 별도의 프로세스가 생성하기 때문에 , 프로세스가 많아질수록 시스템에..

    Java List 와 배열

    Java List 와 배열

    자바를 공부하며 List와 배열의 차이점을 자세히 알지 못해 이번 기회에 제대로 정리해보려 합니다. 1. 배열 우선 크기가 3인 정수형 배열을 선언해 봅시다. int[] arr = new int[3]; 배열을 선언하게 되면 같은 자료형의 원소들이 정해진 크기의 배열이 메모리에 할당합니다. 여기서 포인트는 정해진 크기, 같은 자료형입니다. 정해진 크기가 존재하기 때문에 배열의 크기를 늘리거나 줄일 수 없습니다. 원소가 들어있지 않은 배열이나 꽉 찬 배열이나 같은 크기의 같은 자료형의 배열이라면 메모리에 같은 크기가 각각 할당됩니다. 또한 메모리에 연속적으로 할당됩니다. - 시간 복잡도 원소 접근 : O(1) 2. List 그림을 보면 더 쉽게 이해가 가능합니다. 우선 Java에서 List는 Interfac..

    [프로그래머스 문제풀이] 코딩 테스트 준비

    사실 카카오 인턴 코딩테스트를 봤었기 때문에 문제의 내용과 어떻게 풀어야 할지는 대충 감을 잡은 상태로 문제를 풀었습니다. 단순히 DP로만 풀면 되겠지 하고 문제를 풀어나갔을 때 정확성만 맞고 효율성에서 시간초과가 가는 코드를 작성하였습니다. 제가 이와같은 문제를 해결할 때 두 가지 문제 점이 있었는데, 한가지는 시간복잡도 , 다른 한가지는 alp, cop 가 m_alp, m_cop ( 알고력 중 제일 높은 알고력, 코딩력 중 제일 높은 코딩력 ) 보다 큰 경우입니다. 시간 복잡도를 맞추기 위해 커팅이 필요했는데 카카오 문제풀이 해설에서 시간 복잡도가 O(목표 알고력 * 목표 코딩력 * ( problems 배열의 길이 )) 라고 하여 이에 맞게 조정하였습니다. alp, cop 가 m_alp, m_cop ..

    [프로그래머스 문제풀이] 두 큐 합 같게 만들기

    문제를 읽어보면 두개의 큐가 같은 합을 가져아한다고 말한다. 이 때 두개의 큐의 합의 절반을 각각의 큐가 가져야 한다는 것을 알 수 있다. 두개의 큐의 합의 절반을 가진 큐를 구하기 위해 두개의 큐가 하나로 합쳐져 있다고 생각하면 구간 합이라는 것을 알 수 있다. 생각해야 할 점은 구간합이 두개의 큐의 합의 절반이더라도 또 다른 구간이 나올 수 있으므로 구간합이 두개의 큐의 합의 절반이더라도 탐색을 종료하면 안된다. 또 생각해야 할 점은 구간이 정해졌을 때 end가 큐의 길이보다 작을 때와 클 때의 작업 횟수가 다르다는 점이다. def solution(queue1, queue2): s = (sum(queue1)+sum(queue2))/2 start , end = 0, 0 q = queue1+ queue2..

    [프로그래머스 문제풀이] 성격 유형 검사하기 문제풀이

    문제를 읽어보면 구현 문제라는 것을 알 수 있다. 따라서 문제 포인트만 말해보면 ( R , T ) , ( C , F ) , ( J , M ) , ( A , N ) 중 하나씩 골라야 한다. 문제 조건 중 두개 중 점수가 같아 고를 수 없으면 사전 순으로 빠른 순서를 지닌 성격 유형을 고른다. survey 를 하나씩 검사하여 점수를 부여하면 된다. from collections import defaultdict def solution(survey, choices): answer = '' d = defaultdict(int) for idx in range(0,len(survey)): if choices[idx] 4: d[survey[idx][1]]+=choices[idx]-4 mbti=[['R','T'],['..

    [프로그래머스 문제풀이] 양과늑대 문제풀이

    이 문제가 일반적인 Bfs 와 다른 점은 방문할 수 있는 node 가 하나의 Node와 연결되어있는 인접한 Node 뿐만 아니라 방문했었던 Node들과 인접한 Node들을 방문할 수 있다는 점이다. 또한 Node 수가 17 밖에 안되므로 시간복잡도를 크게 생각하지 않아도 된다는 점이다. 따라서 queue에 방문했었던 Node , sheep , wolf 를 담아 방문했었던 Node들과 인접한 Node들을 방문하면서 양을 최대로 담을 수 있는 경우의 수를 구할 수 있다. 물론 코드를 한 번에 보고 푼건 아니며 처음엔 어떻게 접근해야할지조차 몰라 다른 풀이들을 보며 생각해낸 답안이다. from collections import deque def solution(info, edges): g=[[] for _ i..

    Controller , Service , Repository 이해하기

    스프링은 하나의 Layer가 여러가지 하는 일을 좋아하지 않는다. 따라서 각자 하나의 layer는 한 가지 일을 해야한다. layer의 역할과 특징을 간단히 적어보면 이렇다. controller (web) 외부 요청과 응답에 대한 영역 요청 url에 따라 view, mapping 처리 @Autowired Service를 통해 service의 method를 이용 ResponseEntity(DTO)를 body에 담아 Client에 반환 ( Object type 일 경우 엔 ResponseController 를 사용해도 된다. ) Service Controller 과 Repository 사이에 존재 @Service Annotation 사용 @Autowired Repository를 통해 repository의 m..

    [프로그래머스 문제풀이] 배달 문제풀이

    문제를 풀 때 Dijkstra 을 풀면 된다. 음수를 표현 #include #include #include using namespace std; int INF = 10000000; vector map[51]; int result[51]; void dijkstra(int start){ result[start] = 0; //짧은거리를 표현하기 위해 priority_queue 사용 priority_queue pq; pq.push(make_pair(start, 0)); while(!pq. empty()){ int n = pq.top().first; int d = -pq.top().second; pq.pop(); //result[n]이 distance면 패스 if(result[n]