전체 글 562

[SWEA] 1959. 두 개의 숫자열 in JAVA

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PpoFaAS4DFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com A나 B를 자유롭게 움직여서 서로 마주보는 숫자들을 곱한 뒤 모두 더할때의 최댓값을 구하는 문제 A의 길이 = N B의 길이 = M M이 큰 경우, N이 큰 경우, N과 M이 같은 경우 총 3가지의 경우를 고려해줘야 한다. 1) M이 큰 경우 (NM) : A의 배열 길이 > B의 배열 길이 즉, B를 움직이면서 A의 배열 요소와 곱해준다. 1번과 반대로 진행하면 됌. 3) N == M인 경우 : f..

[Coding Test] 자바 문법, 속성 총 정리

목차 1. public static void main(String[] args){} 자동 생성 psvm + enter > 단축키 2. System.out.println() 자동 생성 sout + enter (+ 클래스 이름은 Main) 1. 입력 총 3가지의 방법이 있다. Scanner, BufferedReader, StringTokenizer 입력 처리 속도 : (빠름) BufferedReader > StringTokenizer > Scanner (느림) BufferedReader, StringTokenizer은 문자열로 활용하기 위해 사용한다. 주로 BufferedReader를 사용한다. (1) Scanner Scanner sc=new Scanner(S..

[Java] 자바 8버전, 이클립스 다운로드 하는 방법

1. 자바 8버전 다운로드 https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html Java SE 8 (8u202 and earlier) 버전을 다운로드 한다. 참고로 오라클에서 무료로 보안 업데이트를 지원하는 자바 개발 키트 중에서 마지막 버전이다. 오라클 로그인 창이 나오면 로그인을 진행한다. 설치경로는 기본으로 설정되어 있는 곳으로 JDK를 설치하면서 자동적으로 JRE의 설치 또한 진행된다. JRE란 Java Runtime Environment를 의미한다. (1) 환경 변수 고급 시스템 설정 > 고급탭으로 들어간다. 새로 만들기 버튼 클릭! JAVA_HOME 환경변수 추가 CLASSPATH 환경변수 추가 Path 편..

[Java] 조건문 , 반복문, 배열

목차 https://opentutorials.org/course/1223/5373 배열 - 생활코딩 배열 배열(Array)은 연관된 정보를 그룹핑 하는데 사용한다. 이해를 돕기 위해서 비유를 들어보겠다. (비유는 이해를 돕기 위한 것일 뿐이다. 비유가 오히려 이해에 방해될 수 있다. 비유가 도움되 opentutorials.org 조건문 ( if문, switch문 ) 자바의 정석 1권 136p~ if문이 주로 많이 사용된다. 하지만, switch문에 대해 오랜만에 학습하기 때문에 기억도 떠올릴 겸 학습 진행! switch (조건식) { case 값1: // 조건식의 결과 == 값1일 때 수행 case 값2: // 조건식의 결과 == 값2일 때 수행 .... default: // 조건식의 결과와 일치하는 c..

[Java] 문자열 생성시 String과 new String()의 차이

String a = "Hello"; # 문자열 리터럴 생성 방식 String b= new String("Hello"); # new 연산자를 이용한 생성 방식 두 방식 모두 문자열을 생성하는 방식이나 가장 큰 차이점은 메모리 영역 부분입니다. Java에서는 String을 저장하는 방식은 총 2가지 입니다. Headp에 저장하거나 혹은 별도의 string constant pool에 저장하거나! 1. 문자열 리터럴 생성 방식 큰따옴표로 둘러싼 문자의 연속체를 의미 : string constant pool이라는 영역에 존재합니다. 2. new 연산자를 이용한 생성 방식 : Heap 영역에 존재합니다. 참고로 new 연산자로 생성하는 방식은 잘 사용하지 않는다. 문자열 리터럴 방식으로 사용하면 재사용이 가능한데,..

[Java] 연산자 (+증감 연산자, 비교 연산자, 논리 연산자)

목차 https://opentutorials.org/course/1223/5331 연산자 - 생활코딩 연산자란 연산자(演펴다연 算계산산 子, operator)란 특정한 작업을 하기 위해서 사용하는 기호를 의미한다. 작업의 종류에 따라서 대입 연산자, 산술 연산자, 비교 연산자, 논리 연산자 등이 있다. opentutorials.org 참고 서적 : 자바의 정석 연산자란? : 연산을 수행하는 기호를 의미한다. 연산자 (operator) : 연산을 수행하는 기호 피연산자 (operand) : 연산자으치 작업 대상 (변수, 상수, 리터럴 수식) 연산자의 종류 종류 연산자 설명 산술 연산자 + - * / % > 사칙연산과 나머지 연산 비교 연산자 > =

[Java] 데이터 타입 (+double형, float형 ), 형변환

목차 https://opentutorials.org/course/1223/5375 데이터 타입 - 생활코딩 데이터 타입은 조금 어렵다. 후속 수업에서 필수적인 선행지식은 아니지만, 또 뒤에 배치하는 것도 애매하다. 이번 토픽의 학습이 어렵게 느껴지면 다음 토픽으로 넘어가고 나중에 다시 학습하 opentutorials.org 데이터 타입 컴퓨터에 저장되는 정보의 가장 작은 단위 = bit 데이터 타입 데이터 종류 데이터 크기 논리형 boolean 1 byte 문자형 char 2 byte 정수형 byte 1 byte short 2 byte int 4 byte long 8 byte 실수형 float 4 byte double 8 byte 논리형 : boolean형의 기본값은 false이다. 문자 : char 타..

[Java] 숫자와 문자, 문자열

참고 링크 https://opentutorials.org/course/1223/5261 숫자와 문자 - 생활코딩 프로그래밍 입문자에게 가장 익숙한 데이터 타입(data type)은 숫자와 문자일 것이다. 이번 시간에는 실제로 가장 많이 사용되는 데이터 형인 문자와 숫자를 프로그래밍에서는 어떻게 표현하고 연 opentutorials.org 이번 프로젝트를 수행하면서 자바에 대해 두루뭉실하게 알고 있던 부분을 집고 넘어가야겠다고 생각했다. 그래서 정리가 잘 되어 있는 생활코딩이라는 사이트를 주메인으로 잡고 추가적으로 학습해야 하는 내용은 따로 조사해서 첨부할 예정! 문자와 문자열 문자 -> 작은 따옴표 ( +큰 따옴표도 가능) 문자열 -> 큰 따옴표만 가능 문자열 안에 큰 따옴표 넣는 방법 \를 큰 따옴표 ..

[프로그래머스] 게임 맵 최단거리 in python

https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr 문제를 보며 요약한 내용=> 내 위치 : (1,1) 상대 위치 : (n,m) 검은색 = 막힌 길 (0) 흰색 = 갈 수 있는 길 (1) 맵 벗어난 길은 갈 수 없다. 상대 팀 진영으로 가는 가장 빠른 길 -> bfs? 도착못할수도 있다. -> visited[x][y]=-1이면 도착 못한 거! => -1 출력 ..

[프로그래머스] 이진 변환 반복하기 in python + (bin, oct, hex 내장함수)

https://programmers.co.kr/learn/courses/30/lessons/70129 코딩테스트 연습 - 이진 변환 반복하기 programmers.co.kr 이 문제는 입력받은 문자열의 개수를 이진법으로 바꿨을때의 값이 1이 될 때까지 아래 과정을 반복하는 것! 1. 입력 받은 문자열에서 0을 모두 제거한다. 2. 1의 개수를 이진법으로 변환한다. 3. 이진법으로 변환한 값이 딱 "1"이 될 때까지 위 과정을 반복한다. def solution(s): zero_cnt=0 # 0의 개수 change_cnt=0 # 변환 횟수 while s!='1': # 1. 0 제거 word='' for i in s: if i=='1': word+=i else: zero_cnt+=1 after_cnt=len(..

[Python] 반올림함수 round | (사사오입, 오사오입)

1. 사사오입 : 4 이하면 버림, 5 이상이면 올림 2. 오사오입 : 5 미만의 숫자는 버림, 5 초과의 숫자는 올림 5일때 처리해주는 방식이 사사오입 방식과 다르다. 5의 앞자리가 짝수 -> 버림 5의 앞자리가 홀수 -> 올림 흔히 파이썬에서 쓰는 round 함수는 오사오입 방식이다. round 함수로 사사오입 방식을 구현하려면? 해당 값이 양수이면 0.5를 더해주고 음수이면 0.5를 빼주면 된다. 왜 위처럼 해야하는 지 이제부터 상세하게 설명해보기! 오사오입 방식은 5의 앞자리수가 짝수일 때 버린다. 이를 해결하기 위해 0.5를 더해주고 빼주는 것이다. 예시를 들면 사사오입 방식대로 2.5를 반올림하면 3이 나와야한다. 하지만 오사오입 방식에서는 2가 나온다. 왜냐하면 5의 앞자리 수가 짝수이기 때..

[스프링부트] 개발하며 만난 에러 기록집 ( = 계속 업데이트 될 예정)

1. AWS S3 버킷 : Access Denied 에러 com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: ~~~~; S3 Extended Request ID https://eboong.tistory.com/543 [AWS S3 버킷] Access Denied 오류 해결 com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Re..

[AWS S3 버킷] Access Denied 오류 해결

com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: ~~~~; S3 Extended Request ID: ~~~~ 클래스명 수정을 해야해서 해당 작업을 진행한 후, 제대로 기능이 동작하는 지 전체적으로 점검을 하던 중에 만나게 된 에러입니다. 분명, 얼마전까지만 하더라도 작동이 잘 됐었는데 처음 뜬 오류를 보고 이번에도 내가 뭔가 실수를 했구나!?라고 생각했죠.. 부랴부랴 구글링을 해보니 API Key가 노출되어 접근이 막혔다네요..!? 하지만 전 깃허브 어디에도 API Key를 올린 기억이 없고 무엇보다..

[코테 입문서 추천] 코딩 테스트로 시작하는 파이썬 프로그래밍!

개발자로 취업을 하기 위해서는 이제 필히 준비를 해야하는 프로세스 바로 코딩테스트..! 작년부터 코딩테스트를 준비해왔지만, 학교 수업, 과제, 자기소개서 작성 등으로 인해 계속해서 우선순위가 밀려나게 되었고 결국 많은 시간을 투자하지 못했습니다. 또한, 쌩독학으로만 백준 사이트에서 문제를 풀다보니 처음에는 입출력하는 부분도 낯설어서 익숙해지는 데 시간이 꽤나 걸렸어요 그리고 무엇보다도 꾸준하게 풀어내는 게 힘들었어요! 올해안에 취업을 하는 게 제 목표이기도 하고, 올해는 기필코! 코딩테스트에 발목 붙잡히지 말자라는 생각에 "코딩테스트로 시작하는 파이썬 프로그래밍" 책을 읽게 되었습니다. 이 책에는 25가지 기출문제 상세코드와 연습문제가 수록되어 있습니다. 그래서 연습문제로 확실하게 이해했는지 체크해볼 수..

[MySQL] Workbench에서 제약사항 추가하기

회원 탈퇴 시, 해당 회원과 외래키로 연결되어 있는 다른 테이블의 데이터는 유지하는 방법을 찾아보았다. 외래키에 적용할 수 있는 제약사항은 총 4가지가 있다. (참고로, on delete , on update 옵션 각각 선택할 수 있다) 1. RESTRICT : 개체(회원 테이블) 변경/삭제 시, 다른 개체(게시글 테이블)가 해당 개체(회원 테이블)를 참조하고 있을 경우, 해당 개체의 변경/삭제는 제한된다. 2. CASCADE : 개체(회원 테이블) 변경/삭제 시, 다른 개체(게시글 테이블)가 해당 개체(회원 테이블)를 참조하고 있을 경우, 모든 개체(회원 테이블의 개체, 게시글 테이블의 개체)가 변경/삭제된다. 3. NO ACTION : 개체(회원 테이블) 변경/삭제 시, 다른 개체(게시글 테이블)가 ..

[Coding Test] 시간 복잡도 총정리!

입력의 최대 크기와 알고리즘의 시간 복잡도를 보고 수행 시간을 어림짐작할 수 있어야 한다고 해요! 알면서도 매번 코드 구현만 하던 나 자신 반성하며,, 이번 기회에 시간 복잡도에 관련된 내용을 정리하는 포스팅을 해보려고 합니다 ! 알고리즘 시간복잡도는 주로 빅오 표기법을 사용해서 표기합니다. O < (1) < O(logn) < O(N) < O(nlogn) < O(n^2) < O(n^3)

[스프링부트] "JWT 토큰"과 세션 기반 인증의 차이점

로그인 구현 방식 로그인 구현 방식에는 세션 방식과 JWT 토큰을 사용하는 방식이 있습니다. 일단 세션 방식에 대해 먼저 알아보겠습니다. 세션 방식이란? : 세션은 서버의 메모리에 생성되는 저장 공간입니다. 바로 이 저장공간에 로그인한 유저의 정보가 저장됩니다. 사용자가 로그인을 하게 되면 서버는 쿠키에 세션ID를 실어서 브라우저에게 보냅니다. 세션 방식을 사용하는 이유가 뭘까요? 일단 HTTP 프로토콜의 특징을 이해해야 합니다. Stateless (무상태 프로토콜) : 어떠한 이전 요청과도 무관한 각각의 요청을 독립적인 트랜잭션으로 취급하는 통신 프로토콜이빈다. 즉 서버에 세션 상태가 없는 상태를 의미합니다. Stateless 구조는 서버의 response가 클라이언트와의 세션 state와 독립적입니다..

[Python] 입출력 관련 모음집

1. 특수 문자 출력하기 He says "It's really good life!"를 출력하려면 \를 이용해야 합니다. 출력하고 하는 문자 앞에 \를 붙여주면 됩니다. print("He says \"It\'s really good life!\""); 2. 두 줄 출력하기 (1) \n 이용하기 print("Hello\nWorld!") (2) print문 이용하기 print("Hello") print("World") 3. 공백 또는 구분자 사용하여 출력하기 (1) 공백을 사이에 두고 출력하기 : 쉼표 이용 print(3,5) (2) 구분자 사용하기 : sep 이용 print(3,5,sep=":") 4. 출력 형식 (1) 변수 포맷 (%d, %s, ..)과 %를 사용한다. %s : 문자열 %c : 문자 %d ..

[스프링부트] Error parsing HTTP request header

게시글 수정을 하는 테스트를 진행하던 도중 위와 같은 에러가 떴습니다. 찾아보니 http를 https로 써서 나타나는 문제라고 하여 아래 부분을 수정 후 다시 테스트를 진행했습니다. 그런데도 오류가 나서 자세히 살펴보니.... /api/v1이 아닌 /api/vi로 작성을 했더군요.. 컨트롤러에 적혀있는 주소랑 다르게 적혀 있어서 오류가 났나 봅니다 ㅠ.ㅠ

[스프링부트] PostsApiControllerTest.java (조회기능) + h2 데이터베이스 콘솔 사용법

h2 웹 콘솔을 사용하기 위해서는 application.properties에 아래 옵션을 추가해줍니다. spring.h2.console.enabled=true 그런 다음에 main 메소드를 실행시켜줍니다. 그러면 톰캣이 8080 포트로 실행됩니다. http://localhost:8080/h2-console로 접속하면 웹콘솔 화면이 등장합니다. JDBC URL에는 jdbc:h2:mem:testdb로 작성해줍니다. Connect 버튼을 클릭하면 현재 프로젝트의 h2를 관리할 수 있는 페이지로 이동합니다. POSTS 테이블이 정상적으로 나타나는 것을 확인할 수 있습니다. 조회하는 방법은 SELECT * FROM POSTS; select문을 입력해줍니다. 만약 현재 등록된 데이터가 없다면 insert into ..

[스프링부트] PostApiController Test 작성 (게시글 수정 기능)

Posts.java update 부분에 쿼리가 없는 이유는 JPA의 영속성 컨텍스트 때문입니다. 영속성 컨텍스트란? : 엔티티를 영구 저장하는 환경으로 일종의 논리적 개념입니다. JPA의 핵심 내용은 엔티티가 영속성 컨텍스트에 포함되어 있느냐 아니냐로 갈립니다. 만약 트랜잭션 안에서 데이터베이서에서 데이터를 가져오면? 이 데이터는 영속성 컨텍스트가 유지된 상태입니다. 이 상태에서 해당 데이터의 값을 변경하면 트랜잭션이 끝나는 시점에 해당 테이블에 변경분을 반영합니다. 즉, Entity의 값만 변경하면 Update 쿼리를 따로 해줄 필요가 없어지빈다. 이 개념을 더티 체킹이라고 합니다. PostsRepository.java PostsUpdateRequestDto.java dto는 Entity의 필드 중 일..

[스프링부트] HTTP 구조 - header , body

HTTP 많이 들어본 용어인데 막상 설명하려고 하니까 입이 떨어지지 않아서 개념정리도 할 겸 포스팅 시작합니다. HTTP는 HyperText Transport Protocol의 약자입니다. 문서를 전송하기 위한 약속으로 해석됩니다. HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. 서버와 클라이언트 사이에서 어떻게 메세지를 교환할 지 정해놓은 규칙입니다. 80번 포트를 사용하고 HTTP의 구조는 요청(Request)와 응답(Response)으로 구성되어 있습니다. HTTP 요청/응답 메세지는 HTTP 헤더와 HTTP 본문으로 이루어져있습니다. 1. HTTP 헤더 : HTTP 본문 및 요청/응답에 대한 정보를 포함합니다. 해당 메세지가 제공하는 기능에 대한 최소한의 정보가 정리된 요..

[스프링부트] PostApiControllerTest.java (게시글 등록)

Posts.java (Entity 클래스) PostsRepository.java PostSaveRequestDto.class (web -> dto) PostsService.java (서비스) PostsApiController (컨트롤러) 등록하기 테스트 @Test public void Posts_등록된다() throws Exception{ //given String title="title1"; String content="content1"; PostSaveRequestDto requestDto=PostSaveRequestDto.builder() .title(title) .content(content) .author("author") .build(); String url="http://localhost:"..

[스프링부트] @Autowired와 private final 차이점

책을 읽으며 따라하다 보니까 의문이 생겼습니다. 어떤 클래스에서는 @ Autowired를 쓰고, 또 어떤 클래스에서는 private final을 이용해서 의존성을 주입하고,, 둘의 차이가 궁금해졌습니다. 일단 스프링 프레임워크에서 의존성을 주입하는 방식은 총 3가지 입니다 . private final (생성자 주입 : Constructor Injection) > 생성자 기반 DI @Autowired ( 필드 주입 : Field Injection) > 필드에 자동으로 의존성이 주입됩니다. setter (수정자 주입 : Setter Injection) > 수정자 주입 참고로 @Autowired와 seeter는 필드를 final로 선언할 수 없습니다. 가장 권장하는 방식은 생성자로 주입받는 방식입니다. @Au..