전체 글 83

[Algorithm] 프로그래머스_오픈채팅방_2019 KAKAO BLIND RECRUITMENT

설명 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다. "[닉네임]님이 들어왔습니다." 채팅방에서 누군가 나가면 다음 메시지가 출력된다. "[닉네임]님이 나갔습니다." 채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다. 채팅방에서 닉네임을 변경한다. 닉네임을 변경할 때는 기존에 채팅방에 출력되어 있던 메시지의 닉네임도 전부 변경된다. 예를 들어, ..

Algorithm 2021.08.23

[JPA] Spring Data JPA를 이용한 페이징 처리

JPA 페이징 관련하여 다양한기능들이나 동작원리, 개념 등 정리가 잘 된 글들이 많다. 추후 참고 해보자. 여기선 예시를 통해 기본으로 간단하게 JPA로 페이징 처리를 해보자. 아래 설명할 예시는 아래의 가이드문서를 참고했습니다. https://docs.spring.io/spring-data/jpa/docs/2.3.1.RELEASE/reference/html/#reference Spring Data JPA - Reference Documentation Example 108. Using @Transactional at query methods @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { List..

JPA 2021.08.19

[Spring] 유효성 검사(Validating Form)

사용해 보면서 테스트한 내용을 간단하게 정리한 글입니다. validation이란 어떤 데이터의 값이 유효한지, 타당한지 확인하는 것을 의미한다. 즉 데이터 필드들의 값 존재 여부, 글자의 제한 등 해당 양식에 유효한지 판별하기 위해서 사용한다. 1. 의존성 주입 gradle implementation 'org.springframework.boot:spring-boot-starter-validation' maven org.springframework.boot spring-boot-starter-validation 2. 데이터 컨테이너 클래스 유효성을 검사가 필요한 데이터가 담긴 클래스를 선택한다. 아래 Board클래스는 id, title, contet를 프로퍼티로 사용하고 있고 유효성 검사가 필요하다고 가..

Spring 2021.08.18

[JAVA] 비트연산 정리

* 이진 비트 연산을 수행해서 결과를 정수로 반환하는 연산자 (정수형만 사용 가능) 1. AND 연산 (&) - 둘다 '1'일 경우 '1'로 변환 A 1 0 1 0 B 1 0 1 1 Result 1 0 1 0 int A = 10; int B = 11; System.out.println("A : " + Integer.toBinaryString(A)); System.out.println("B : " + Integer.toBinaryString(B)); System.out.println("A & B : "+Integer.toBinaryString(A & B)); 2. OR 연산 ( | ) - 하나만 '1'일 경우 '1'로 변환 A 1 0 1 0 B 1 0 1 1 Result 1 0 1 1 int A = 10;..

Java 2021.08.17

[JAVA] 진법 변환 정리 (n진수 <-> 10진수)

1. 10진수 -> n진수 * 변환하기 전에 확인! 10진수를 제외한 나머지 진수는 String으로 받아야 한다. -> int는 전부 10진수로 인식 2진수, 8진수, 16진수는 아래와 같이 Binary, Octal, Hex함수가 존재한다. 물론 toString(int n, int radix)로 사용해도 무관하다. 테스트 코드 public class Solution { public static void main(String[] args) { // 테스트를 위한 10진수 값 = 25 int a = 25; System.out.println("10진수 -> 2진수"); System.out.println(Integer.toBinaryString(a)); System.out.println(Integer.toStr..

Java 2021.08.15

[Algorithm] 프로그래머스_실패율_2019 KAKAO BLIND RECRUITMENT

설명 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 ..

Algorithm 2021.08.15

[Algorithm] 프로그래머스_약수의 개수와 덧셈

설명 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ left ≤ right ≤ 1,000 예시 입력 / 출력 left right result 13 17 43 24 27 52 풀이 과정 1. 2중 for문으로 바깥은 i는 left부터 right까지 반복문으로 돌리고 안으로는 1부터 i값까지 1씩 증가 시키면서 나머지 값이 '0'일 경우(약수 성립) HashMap에 해당 i를 key로 getOrDefault을 사용하여 1씩 증가 시켜준다. 2. 위의 반복문을 모두 나오면 HashMap의 key는 left부터 ..

Algorithm 2021.08.13

[Algorithm] 프로그래머스_예산

설명 S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다. 물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다. 부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요. 제한사항 d는 부서별로 신청한 금액이..

Algorithm 2021.08.13

[Thymeleaf] classappend : 조건에 따른 속성 붙히기

thymeleaf 공식 홈페이지의 튜토리얼 5.4 Appending and prepending을 보면 "두 가지 특정 추가 속성이 있습니다. th:classappend 및 th:styleappend 속성은 기존 속성을 덮어쓰지 않고 CSS 클래스 또는 스타일 조각을 요소에 추가하는 데 사용됩니다." 라고 설명되어 있다. 즉, 기존 class 속성에 파라미터 조건에 따라 속성 추가할 때 사용할 수 있다. 사용 방법) 예시1) -> 파라미터로 'home'이 넘어올 경우 기존 class="nav-item" 에 active 속성을 뒤에 붙힌다. 예시2) -> 파라미터로 'board'이 넘어올 경우 기존 class="nav-item" 에 active 속성을 뒤에 붙힌다. Reference https://www.t..

Thymeleaf 2021.08.13

[Algorithm] 프로그래머스_완주하지 못한 선수(해시)

설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 예시 입력 / 출력 participant completion return ["leo", "k..

Algorithm 2021.08.12

[Git] 기본 명령어 정리

기본 명령어 저장소 생성 git init 원격 저장소로부터 복제 git clone {url} 변경 사항 체크 git status 특정 파일 스테이징 git add {파일명} 변경된 모든 파일 스테이징 git add . 커밋 git commit -m "{커밋 메시지}” 원격으로 보내기 git push origin main 원격저장소 추가 git remote add origin {원격서버주소} Commit 커밋 합치기 git rebase -i HEAD~4 // 최근 4개의 커밋을 하나로 합치기 커밋 메세지 수정 git commit --amend // 마지막 커밋메세지 수정(ref) 커밋 이력 확인 git log // 모든 커밋로그 확인 git log -3 // 최근 3개 커밋로그 확인 git log --pr..

Git 2021.08.12

[HTTP] 인터넷 네트워크(IP, TCP, UDP, DNS)

IP (인터넷 프로토콜) 송신호스트와 수신호스트가 패킷교환 네트워크(패킷 스위칭 네트워크)에서 정보를 주고받는데 사용하는 정보 위주의 규약 (* 인터넷안에서 컴퓨터 또는 서버들간에는 IP 프로토콜을 통해 통신하게 된다) IP프로토콜의 한계 1. 비 연결성 - 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 (우선 보낸다 우편을 보내듯) 2. 비 신뢰성 - 중간에 패킷이 사라지면? (패킷 손실) - 패킷이 순서대로 가지 않으면? (1, 2, 3 -> 1, 3, 2) 3. 프로그램 구분 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면? (음악을 듣고 게임을 하는 등..) TCP (전송 제어 프로토콜) - 데이터 메시지를 IP 패킷으로 감싸기 전에 TCP 패킷으로 감싸 IP프로토콜..

HTTP 2021.08.09

[Algorithm] 프로그래머스_키패드 누르기[카카오 인턴]

설명 스마트폰 전화 키패드의 각 칸에 다음과 같이 숫자들이 적혀 있습니다. 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다. 맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손 엄지손가락을 사용합니다. 가운데 열의 4개의 숫자 2, 5, 8, 0을 입력할 때는 두 엄지손가락의 현재 키패드의 위치에서 더 가까운 엄지손가락을 사용합니다. 4-1...

Algorithm 2021.08.09

[Algorithm] 프로그래머스_체육복

설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성..

카테고리 없음 2021.08.04

[Spring] HTTP 메시지 컨버터 (HttpMessageConverter)

HTTP 메시지 컨버터 HTTP 메시지 컨버터란 기존의 뷰 템플릿으로 HTML을 생성해서 응답하는 것이 아니라 HTTP API(REST API)처럼 JSON형식의 데이터 메시지바디를 직접 읽거나 쓰기 위해 메시지 본문을 다루는 방식을 말한다. 스프링 MVC는 다음의 경우에 HTTP 메시지 컨버터를 적용한다. HTTP 요청: @RequestBody , HttpEntity(RequestEntity) HTTP 응답: @ResponseBody , HttpEntity(ResponseEntity) 기존의 요청 URL 파라미터, HTML Form방식에서의 viewResolver대신 HttpMessageConverter이 동작하게 된다. 스프링 부트 기본 메시지 컨버터 (우선순위 순) 1. ByteArrayHttpMe..

Spring 2021.08.02