Intro 패캠 백엔드 과정을 작년 12월 12일에 시작했는데 어느덧 5월을 바라보고 있다.. 정말정말 정말 금방이다ㅠ ㅠ 과정 처음시작하고 1주일인가? 뒤에 시작한 그룹스터디에서는 처음에 게시판 프로젝트를 만들어보고 본격적인 프로젝트로 호텔 예약 프로젝트를 진행했다 ! 중간에 팀원도 한 분 나가셨구 처음이라 우왕좌왕했던 기억들이 많았지만 스터디 팀장이 정말 잘 이끌어주셔서 ㅋㅋㅋ ㅋ 그래도 프로젝트가 나름 성공적으로 끝이났다 ! 아래는 프로젝트의 대략적인 설명이다. 🏠 호텔 예약 프로젝트 ✍🏻 ERD image 🌟 동작 방식  L R: BL + BL+1 + ... + BR-1 + BR 을 출력한다. Figure 1. 모든 참가자가 문제를 풀 수 있을 것이라고 기대하는 욱제의 표정 욱제의 질문에 답하고 함께 엠티를 떠나자!! 입력 첫 번째 줄에 수열 A의 길이 N과 질문의 개수 Q가 공백으로 구분되어 주어진다. (1 ≤ N, Q ≤ 300,000) 두 번째 줄에 N개의 정수 A1, A2, ..., AN 이 공백으로 구분되어 주어진다. Ai 는 수열 A의 i 번째 수이다. (1 ≤ Ai ≤ 1,000) 세 번
용어 💼 인증(Authentication) > 스스로를 증명하다라는 뜻으로 흔히 말하는 로그인 개념이다. 인증을 위해서 사용자는 자신이 알고 있는 자신의 정보를 제공하는데 아이디와 패스워드가 이에 속한다. 🙆🏻♀️ 인가(Authorization) > 허가나 권한이라는 개념과 같다. 인증이 된 사용자라고 해도 이에 접근 할 수 있는 권한이 있는지를 확인하는 과정을 의미한다. 🔒 접근 주체(Principal) >보호받는 리소스에 접근하는 대상 🏅 권한 > 인증된 주체가 어플리케이션의 동작을 수행할 수 있도록 허락되어 있는지 결정 인증 과정을 통해 주체가 증명된 후 권한 부여 가능 권한 부여에 두 가지 영역이 존재하는데 웹 요청 권한과 메서드 호출 및 도메인 인스턴스에 대한 접근권한 부여 총 2가지가 있다. Spring Security 동작 방식  문서를 교환하기 위해 만들어진 protocol(통신 규약). 즉 웹상에서 네트워크로 서버끼리 통신을 할때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구조" 라고 보면 된다. 프론트앤드 서버와 클라이언트간의 통신에 사용된다. 또한 백앤드와 프론트앤드 서버간에의 통신에도 사용된다. HTTP는 TCP/IP 기반으로 되어있다. HTTP 기본적으로 request(요청)/response(응답) 구조로 되어있다. 클라이언트가 HTTP request를 서버에 보내면 서버는 HTTP response를 보내는 구조 클라이언트와 서버의 모든 통신이 요청과 응답으로 이루어 진다. Request Message HTTP Request Message는 공백(blank line)을 제외하고 3가지 부분으로 나누어진다. **HTTP Requ
12월에 시작한 과정이 어느덧 중반을 넘어가고 있다.. 첨엔 7개월 어떻게 듣나했더니 듣다보니 적응되어버린,,,, ㅋㅋㅋㅋ ㅠㅠ 취업준비도 이제 슬슬해야하는데 어렵다 어려워 이번회고는 2월 13일부터 오늘날짜인 4월6일까지의 회고를 작성해보려고 한다. 📚 스프링 강의 시작 패캠 백엔드 과정은 거의 1시부터 6시까지 자습하고, 7시부터 10시까지 실시간 강의를 듣는다 ! 자바 실시간 강의가 끝나고 스프링 실시간 강의를 듣게 되었다. 그룹스터디에서 스프링부트 프로젝트를 하고있어 조금 알고있긴 하지만 이 과정에 들어오게 된 가장 큰 이유가 스프링을 배울 수 있어서기에 기대가 많이 됐었다. 스프링 강사님의 강의는 녹화본도 제공되고, 강의자료나 판서까지 제공해주셔서 복습을 원활하게 할 수 있어서 좋다 ! !  💼 커리어 코칭 패스트 캠퍼스 백엔드 과정에서는 취업을 위한 커리어 코칭 서비스를 제공하고 있다. 12월에 커리어 코칭 서비스 소개와 이력서 특강을 듣고 1월 말~ 2월 초에 담임기버를 매칭해 실제 현업에 계신 분들의 적극적인 도움을 받아 볼 수 있다 🙆🏻♀️ - 커리어 코칭 서비스 안내 > ### 1:1 커리어 코칭 이번 메가바이트스쿨 4기 수강생분들께는 개인당 3회씩, 1:1 커리어 코칭 서비스가 제공됩니다.
문제 임한수와 임문빈은 서로 사랑하는 사이이다. 임한수는 세상에서 팰린드롬인 문자열을 너무 좋아하기 때문에, 둘의 백일을 기념해서 임문빈은 팰린드롬을 선물해주려고 한다. 임문빈은 임한수의 영어 이름으로 팰린드롬을 만들려고 하는데, 임한수의 영어 이름의 알파벳 순서를 적절히 바꿔서 팰린드롬을 만들려고 한다. 임문빈을 도와 임한수의 영어 이름을 팰린드롬으로 바꾸는 프로그램을 작성하시오. 입력 첫째 줄에 임한수의 영어 이름이 있다. 알파벳 대문자로만 된 최대 50글자이다. 출력 첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다. 코드
🧐 JWT 사용배경 세션 기반 인증방식 : 서버에서 클라이언트에게 세션 ID 부여, 이 ID를 사용하여 사용자를 인증하고 권한 부여하는 식으로 처리한다. 🚨 하지만, 세션 기반의 인증 방식은 서버 측에서 상태 유지 --> 확장성 & 분산처리에 제한이 있다. 또 서버 측에서 상태를 유지하기 때문에 서버 부하가 크고 여러 서버를 사용할 경우 동기화 문제도 발생한다. 💡 JWT란? JSON Web Token의 약어로 웹 애플리케이션에서 사용자 인증 및 권한 부여를 위한 인증 방식 중 하나이다. 클라이언
문제 학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어의 점수는 레벨을 클리어하면서 얻은 점수의 합으로, 이 점수를 바탕으로 온라인 순위를 매긴다. 동준이는 레벨을 난이도 순으로 배치했다. 하지만, 실수로 쉬운 레벨이 어려운 레벨보다 점수를 많이 받는 경우를 만들었다. 이 문제를 해결하기 위해 동준이는 특정 레벨의 점수를 감소시키려고 한다. 이렇게해서 각 레벨을 클리어할 때 주는 점수가 증가하게 만들려고 한다. 각 레벨을 클리어할 때 얻는 점수가 주어졌을 때, 몇 번 감소시키면 되는지 구하는 프로그램을 작성하시오. 점수는 항상 양수이어야 하고, 1만큼 감소시키는 것이 1번이다. 항상 답이 존재하는 경우만 주어진다. 정답이 여러 가지인 경우에는 점수를 내리는 것을 최소한으로 하는 방법을 찾아야 한다. 입력 첫째 줄에 레벨의
문제 농부 상근이는 마당에 심기 위한 나무 묘목 n개를 구입했다. 묘목 하나를 심는데 걸리는 시간은 1일이고, 상근이는 각 묘목이 다 자라는데 며칠이 걸리는지 정확하게 알고 있다. 상근이는 마을 이장님을 초대해 자신이 심은 나무를 자랑하려고 한다. 이장님을 실망시키면 안되기 때문에, 모든 나무가 완전히 자란 이후에 이장님을 초대하려고 한다. 즉, 마지막 나무가 다 자란 다음날 이장님을 초대할 것이다. 상근이는 나무를 심는 순서를 신중하게 골라 이장님을 최대한 빨리 초대하려고 한다. 이장님을 며칠에 초대할 수 있을까? 입력 입력은 두 줄로 이루어져 있다. 첫째 줄에는 묘목의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄에는 각 나무가 다 자라는데 며칠이 걸리는지를 나타낸 ti가 주어진다. (1 ≤ ti ≤ 1,000,000) 출력 첫째 줄에 며칠에 이장님을 초대할 수 있는지 출력한다. 답이 여러 가지인 경우에는 가장 작은
문제 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다. 각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다. 입력 첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각 로프가 버틸 수 있는 최대 중량이 주어진다. 이 값은 10,000을 넘지 않는 자연수이다. 출력 첫째 줄에 답을 출력한다. 코드 💡 풀이 먼
문제 언제나 최고만을 지향하는 굴지의 대기업 진영 주식회사가 신규 사원 채용을 실시한다. 인재 선발 시험은 1차 서류심사와 2차 면접시험으로 이루어진다. 최고만을 지향한다는 기업의 이념에 따라 그들은 최고의 인재들만을 사원으로 선발하고 싶어 한다. 그래서 진영 주식회사는, 다른 모든 지원자와 비교했을 때 서류심사 성적과 면접시험 성적 중 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 원칙을 세웠다. 즉, 어떤 지원자 A의 성적이 다른 어떤 지원자 B의 성적에 비해 서류 심사 결과와 면접 성적이 모두 떨어진다면 A는 결코 선발되지 않는다. 이러한 조건을 만족시키면서, 진영 주식회사가 이번 신규 사원 채용에서 선발할 수 있는 신입사원의 최대 인원수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫
문제 상근이는 근처 피자 가게에서 매일 저녁으로 피자를 배달해 먹는다. 주머니 사정이 얇아진 상근이는 이번 달부터는 "최고의 피자"를 구매하려고 한다. 최고의 피자란, 피자 가게에서 주문할 수 있는 피자 중 1원당 열량이 가장 높은 피자를 말한다. 최고의 피자는 여러 종류가 있을 수도 있다. 이 피자 가게는 토핑 N개에서 여러 종류를 선택해서 주문할 수 있다. 같은 종류의 토핑을 2개 이상 선택할 수는 없다. 또, 토핑을 전혀 선택하지 않을 수도 있다. 선택한 토핑은 도우 위에 올라간다. 도우의 가격은 A원이고, 토핑의 가격은 모두 B원이다. 피자의 가격은 도우와 토핑의 가격의 합계가 된다. 즉, 토핑을 k종류 (0 ≤ k ≤ N) 선택했다면, 피자의 가격은 A + B*k원이 된다. 피자의 열량은 도우와 토핑의 열량의 합이다. 도우의 가격, 토핑의 가격, 그리고 도우와 각 토핑의 열량 값이 주어졌을 때, 최고의 피자의 1원 당 열량을 구하는 프로그램을 작성하시오. **
문제 어떤 나라에 N개의 도시가 있다. 이 도시들은 일직선 도로 위에 있다. 편의상 일직선을 수평 방향으로 두자. 제일 왼쪽의 도시에서 제일 오른쪽의 도시로 자동차를 이용하여 이동하려고 한다. 인접한 두 도시 사이의 도로들은 서로 길이가 다를 수 있다. 도로 길이의 단위는 km를 사용한다. 처음 출발할 때 자동차에는 기름이 없어서 주유소에서 기름을 넣고 출발하여야 한다. 기름통의 크기는 무제한이어서 얼마든지 많은 기름을 넣을 수 있다. 도로를 이용하여 이동할 때 1km마다 1리터의 기름을 사용한다. 각 도시에는 단 하나의 주유소가 있으며, 도시 마다 주유소의 리터당 가격은 다를 수 있다. 가격의 단위는 원을 사용한다. 예를 들어, 이 나라에 다음 그림처럼 4개의 도시가 있다고 하자. 원 안에 있는 숫자는 그 도시에 있는 주유소의 리터당 가격이다. 도로 위에 있는 숫자는 도로의 길이를 표시한 것이다. 제일 왼쪽 도시에서 6리터의 기름을 넣고, 더 이상의 주유 없이 제일
문제 세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오. 입력 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다. 출력 첫째 줄에 정답을 출력한다. 💡 해결과정 문제를 본 후 내 방식대로 고민하고 풀어보았지만 계속 오류가 났다,,, 이 문제에서 가장 핵심은 플러스 연산부터 하고 마이너스 연산하기 였다. 예를
문제 인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다. 사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다. 4번 사람은 3+1+4+3 = 11분, 5번 사람은 3+1+4+3+2 = 13분이 걸리게 된다. 이 경우에 각 사람이 돈을 인출하는데 필요한 시간의 합은
문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄에 최대 사용할 수 있는 회의의 최대 개수를 출력한다. 해결방법 문제 분석 : 1개의 회의실에
자바 토이프로젝트와 스터디 프로젝트를 핑계로 블로그와 알고리즘에 소홀해졌었는데 스터디에서 다시 하루에 한 개씩 주마다 주제를 정해서 같이 풀고 풀이과정 블로그에 올리기로 했다:) 이번주 남은 이틀과 다음주 주제는 그리디 알고리즘으로 정했다. 오늘 문제만 쉽고 낼부터는 어렵다던데 힝 > 그리디 알고리즘 탐욕 알고리즘 또는 욕심쟁이 알고리즘이라고도 불린다. 미래를 생각하지 않고 각 단계에서 가장 최선의 선택을 하는 기법으로 각 단계에서 최선의 선택을 한 것이 전체적으로도 최선이길 바라는 알고리즘이다. 문제 링크 💻 문제 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다. 동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤
조회 🕵🏻 MainController.java 조회이므로 Get방식을 사용하였다. 매개변수로는 id를 받는다. 여기에서 id란 Review의 아이디가 아닌 healthInfo의 id이다. reviewService의 findReview를 실행하며 여기에도 매개변수를 id로 설정하였다. ReviewServiceImpl.java healthInfo에 매개변수로 들어온 id가 있으면 찾아서 healthinfo객체에 넣고 만약에 없다면 콘솔에 해당 게시글이 존재하지 않습니다라는 문구를 출력한다. Review타입인 list를 선언한뒤 healthInfo에서 getReview로 해당 게시글의 리뷰들을 전부 가지고 와 리스트에 넣는다. reviews들을 reviewresponseDTO객체로 변환한뒤 리스트에 추가한 값을 리턴한다. 사실 기능 구현하면서 구글링을 많이 했었는데 거기서 가져온 코드를 나에게 맞게 변환시켰