전체 글 22

<두 개 뽑아서 더하기> 풀이

문제 설명 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers의 길이는 2 이상 100 이하입니다. numbers의 모든 수는 0 이상 100 이하입니다. 입출력 예 numbers result [2, 1, 3, 4, 1] [2, 3, 4, 5, 6, 7] [5, 0, 2, 7] [2, 5, 7, 9, 12] 문제 풀이 문제의 입출력 예를 보면 중복된 결과값은 한 번만 저장하는 것을 알 수 있다. (예2 : 5+2=7, 0+7=7) 중복을 허용하지 않는 것에서 Java Collections Framework 의 Set을 ..

<문자열 내 마음대로 정렬하기> 풀이

문제 설명 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. 제한 조건 strings는 길이 1 이상, 50이하인 배열입니다. strings의 원소는 소문자 알파벳으로 이루어져 있습니다. strings의 원소는 길이 1 이상, 100이하인 문자열입니다. 모든 strings의 원소의 길이는 n보다 큽니다. 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다. 입출력 예시 strings n return ["sun", "..

@RequestParam, @RequestBody, @PathVariable 방식

스프링 부트로 프로젝트를 개발하게되면 Controller에서 프론트로부터 파라미터를 전달받아야 하는 순간이 온다. 파라미터를 전달받는 방식에는 여러가지가 있지만 이번 포스팅에선 @RequestParam, @PathVariable, @RequestBody 3가지에 대해서 다뤄보자. 1. @RequestParam GET 방식으로 넘어온 URI(Uniform Resource Identifier : 통합 자원 식별자) 에서 queryString 형태의 정보를 추출해내는 방식이다. 예를 들면, api 요청시에 URI가 http://localhost:8080/schedule?id=1 이면 queryString 형태의 정보는 ?id=1 이다. @GetMapping("/schedule") public ScheduleR..

Spring Boot 2024.01.24

향상된 for문 활용하기

향상된 for 문 자바의 반복문에는 대표적으로 for, while 문이 존재한다. 오늘은 for문 을 좀 더 편리하게 쓸 수 있게 해준 '향상된 for문'을 사용하다가 생긴 궁금증을 해결한 내용을 기록해보고자 한다. 기본적인 for 문 가장 기본적인 for 문의 형태는 아래와 같다. for(int i = 0; i < n; i++){ //반복하고자 하는 내용 } 반복문 안에 들어갈 수 있는 동작으로는 쓰기 나름이겠지만, 대표적으로 배열안의 값들을 모두 더하는 과정, 배열안의 값들을 콘솔창에 출력하여 확인하는 과정 등이 있다. 반복문은 주로 배열안에 있는 내용물들을 조작할 때 사용하기 때문에 index를 넘어가지 않게 신경써야하기 때문에 매번 불편함이 존재한다. 대표적으로 정수형 배열안의 내용물을 모두 더하..

Java 2024.01.19

Thread에 대한 기초 개념 정리

Thread란 무엇일까? Thread를 얘기하기전에 Process에 대해서 먼저 얘기해야한다. 프로세스는 간단하게 얘기하면 운영체제(OS)위에서 돌아가고 있는 프로그램을 의미한다. 각각의 프로세스는 메모리공간을 할당받아서 실행되고 있다. 그렇다면 쓰레드는 무엇일까? 쓰레드는 하나의 프로세스 안에서 진행되는 프로그램의 흐름이라고 생각할 수 있다. 비유를 통해 이해해보자. 운영체제를 하나의 큰 회사라고 생각해보자. 회사 안에는 여러부서(프로세스 : 진행중인 프로그램)가 있다. 각각의 부서들은 사무실의 공간(메모리)을 할당받아 업무를 진행한다. 그리고 각각의 부서안에는 팀장(main 쓰레드)과 팀원(이외의 쓰레드)들이 존재하여 업무를 처리한다. 쓰레드는 구체적으로 작업을 하고 있는 일꾼이라고 볼 수 있다. 팀..

Java 2024.01.17

Return 값을 굳이 부여하는 이유

return 값에 대하여... 자바로 프로그래밍을 하다보면 메소드를 만드는 과정에서 리턴값을 항상 고민하게 된다. 아직 프로젝트 경험이 적어서 그런지 return 값이 없이 void 로 작업하는게 흐름상 맞는 것 같은데 예제 코드나 정답 코드들을 보면 굳이 return 값을 부여하는 경우가 있다. 이에 대한 의문에 대해 튜터님과 의논을 한 결과 이는 확장성 문제와 연관시킬 수 있음을 알 수 있었다. return 값과 확장성 생각해보면 리턴값이 void 인 경우는 해당 메소드를 활용하는 방법이 딱 한가지로 결정된다. 예를 들면, 클래스 내부의 값을 세팅한다거나, 콘솔창에 값을 출력하는 것들을 예로 들 수 있다. 하지만 만약 리턴값을 부여하게 된다면 void 로도 동작이 가능하고 추가적으로 리턴값을 변수에 ..

Java 2024.01.16

CampManagementService 팀프로젝트 KPT회고

KPT회고 프로젝트를 진행하면서 앞으로도 유지하면 좋을 것(Keep),개선해야할 사항 (Problem), 구체적인 개선 방안(Problem) 에 대해 팀원들과 자유롭게 의견을 나누는 시간을 가졌다. 프로젝트 레포지토리 링크 : https://github.com/dbfjru/CampManagementService Keep 1. 코드의 개선점에 대해 의견을 나누는 것 2. 역할을 분담하고 현재 진행상황을 체크하며 프로젝트를 구현한 것 Problem 1. Github의 다양한 기능을 사용하는 데 아직 미숙함 2. 객체 지향적으로 프로젝트를 구성하지 못하엿음 3. 과목입력 과정이 너무 번거롭다. Try 1. commit을 세분하는 습관을 들이자. 2. 객체지향적으로 설계하는 방법을 공부하자. (MVC 모델 등...

프로젝트 회고 2024.01.16

Scanner 주의사항! nextInt() 와 nextLine()를 같이 쓰는 경우

초심자의 친구 Scanner 사용자 입력값을 받는 과정을 가장 간단한 방법인 Scanner를 이용해서 처리하다보면 의도치 않게 동작하는 경우가 발생한다. 대표적인 예시가 정수입력을 받은 뒤 String 입력을 받으려할 때 발생하는데 구체적인 예시를 통해서 이해해보자! Scanner의 배신 상황을 가정해보자. 학생의 나이와 이름을 순서대로 입력받은 뒤 이를 저장하는 프로그램을 만드는 중이다. 이를 위해 코드를 아래와 같이 작성하였다. Scanner sc = new Scanner(System.in); System.out.println("점수와 이름을 입력해주세요."); int score = sc.nextInt(); String subject = sc.nextLine(); System.out.println("..

Java 2024.01.12

Git과 Github를 이용한 개인 프로젝트 버전관리 흐름

프로젝트 버전관리 프로젝트를 혼자서 진행하고 규모가 크지 않다면 각기 다른 이름을 가지는 파일을 생성하는 방식으로 프로젝트의 버전을 관리할 수 있을 것이다. 하지만 이런 관리방식은 프로젝트의 기간이 길어지고 파일의 개수가 늘어날수록 한계를 마주하게 된다. 이런 어려움을 해결할 수 있게 해주는 것이 git을 통한 버전관리이다. Git vs Github. 둘이 같은 거 아니야? 어플리케이션을 개발해본 경험이 있는 사람이라면 Git에 대해서 한번 쯤은 들어봤을 것이다. 또한 Github라는 것도 들어봤을 것이다. 나 역시 프로그래밍 수업에서 들어봤으며, 사용해보기 전까지는 둘이 같은 거라 생각하고 있었다. 하지만 둘은 엄연히 다른 것이다. Git(깃)? git은 버전을 관리해주는 어플리케이션이다. git을 만..

Git,Github 2024.01.09

Collection Framework - ArrayList 정리

ArrayList? ArrayList는 기존의 배열의 단점을 보완한 자료구조(data structure)이다. 기존의 배열은 어떤 단점이 존재하길래 ArrayList가 등장한 것일까. 1. 기존 배열의 단점 알고리즘 문제풀이를 하거나 프로젝트를 진행하다보면 입력의 개수를 정확히 알기 어려운 경우가 빈번하다. 이런 경우 기존의 배열을 사용하는 것은 굉장히 불편하다. 사이즈를 초과한 입력이 들어오는 것을 방지하기 위해 배열의 길이를 넉넉히 잡자니 메모리 낭비가 심해지고, 그렇다고 짧게 잡았다가 overflow가 발생하게 되면 사이즈를 늘린 새로운 배열에 값을 옮기는 작업을 해주어야한다. 이런 문제를 해결하기 위해 Collection Framework 는 ArrayList를 제공한다. 2. ArrayList의..

Java 2024.01.08