전체 글 385

[리뷰 / 책] 자바와 함께하는 자료구조의 이해

자바와 함께하는 자료구조의 이해 / 양성봉 / 생능출판 별점: ★★★★ (4 / 5) 가격: 28,000원 구입처: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=307088188 제목이 곧 내용인 책이다. 온전히 이 책만으로 공부하지는 않았지만, 알고리즘과 자료구조 공부를 입문할 때 제법 도움을 받았다. 이 블로그에서 Java-자료구조 카테고리에 여러 게시글에 걸쳐 책 내용을 정리해두었으니 관심이 있다면 확인해보는 것도 좋을 듯하다. 자료구조의 개념과 구현을 다루고 있다. 설명이 친절하고 그림을 이용하여 자료구조를 이해하기 쉽게끔 설명하고, 코드를 통해 직접적으로 구현된 자료구조를 볼 수 있다. 각 파트별로 요약도 잘 되어 있고, 이론에 관한 연습문제도 풀어..

리뷰/책 2023.11.15

[책] 후기 작성 목록

자바와 함께하는 자료구조의 이해 ▶ https://sigfriede.tistory.com/375 ▶ 별점: ★★★★ (4 / 5) 스프링 프레임워크 첫걸음 ▶ https://sigfriede.tistory.com/376 ▶ 별점: ★★★ (3 / 5) 컴퓨팅의 정수 ▶ https://sigfriede.tistory.com/377 ▶ 별점: ★★★ (3 / 5) 객체지향의 사실과 오해 ▶ https://sigfriede.tistory.com/378 ▶ 별점: ★★★★ (4 / 5) 데이터베이스 설계 및 구축 ▶ https://sigfriede.tistory.com/382 ▶ 별점: ★★★★ (4 / 5) 자바 ORM 표준 JPA 프로그래밍 ▶ ▶ HTTP 완벽 가이드 ▶ ▶ 모던 자바 인 액션 ▶ ▶ 오브..

리뷰/책 2023.11.06

[일상] 배달 떡볶이를 먹으며 시작하는 습관적 다이어트에 관하여

다이어트를 시작할 때면 공연히 주위에 알리는 것처럼 이 글 역시 마찬가지가 될지도 모른다. 누구도 묻지 않는 근황을 알리는 글이기도 하고 어떤 다짐의 시작이기도 하다. 마지막 게시글로부터 다시 한 달이 지나서야 쓰게 되었다. 그동안 아주 코딩을 놓았냐고 묻는다면 그렇지만도 않다. 그러나 나는 제법 게으른 나날을 보낸 편이었다. 주로 인프런이라는, 프로그래밍을 전문으로 가르치는 사이트에서 스프링에 관련한 강의를 들었다. 그렇지 않은 날은 주로 누워 지냈다. 불확실한 미래로부터 오는 두려움이 꽤 컸다. 이게 내 게으름에 대한 모든 변명이 되지는 않을 테지만. 부트캠프를 처음 신청할 때, 그리고 강의를 들으면서도 이 과정을 끝낼 때 멋진 프로그래머가 되리라는 야망이 있었다. 지금은 잘 모르겠다. 멋진 프로그래..

일상 2023.11.04

[제로베이스 백엔드 스쿨 11기] 반년 간의 일정을 마무리하며

오랜만의 글이다. 영영 오지 않을 것만 같던 날이 왔다. 결국 기준에는 미달하여 수료는 하지 못했다. 모든 과정에 열심히 참여해보고자 했으나, 생각보다 쉽지 않았다. 여전히 코딩은 어렵고, 취업은 막막하다. 3월 1일에 시작하여 9월 23일 파이널 코딩테스트를 마지막으로 모든 일정이 끝났다. 이 과정에서 자바 언어, 자료구조, 알고리즘, 컴퓨터 공학 등 다양한 강의를 들을 수 있었다. 호불호가 있을 수는 있겠으나 전반적으로 좋은 강의였다고 생각한다. 다만 같은 강의를 듣던 수강생에게서도 그렇고 여러 후기에서도 입모아 말하듯, 난이도가 제법 있는 편이다. 또는 강의와 맞지 않아서 수강생임에도 불구하고 강의를 듣지 않고 과정을 진행하던 분도 있었다. 중간에 여러 과제와 테스트가 있었고 모든 과제를 제출하지는..

일상/ZB 2023.09.27

[프로그래머스 코딩테스트] 덧칠하기(Java)

문제 설명 어느 학교에 페인트가 칠해진 길이가 n미터인 벽이 있습니다. 벽에 동아리·학회 홍보나 회사 채용 공고 포스터 등을 게시하기 위해 테이프로 붙였다가 철거할 때 떼는 일이 많고 그 과정에서 페인트가 벗겨지곤 합니다. 페인트가 벗겨진 벽이 보기 흉해져 학교는 벽에 페인트를 덧칠하기로 했습니다. 넓은 벽 전체에 페인트를 새로 칠하는 대신, 구역을 나누어 일부만 페인트를 새로 칠 함으로써 예산을 아끼려 합니다. 이를 위해 벽을 1미터 길이의 구역 n개로 나누고, 각 구역에 왼쪽부터 순서대로 1번부터 n번까지 번호를 붙였습니다. 그리고 페인트를 다시 칠해야 할 구역들을 정했습니다. 벽에 페인트를 칠하는 롤러의 길이는 m미터이고, 롤러로 벽에 페인트를 한 번 칠하는 규칙은 다음과 같습니다. 롤러가 벽에서 ..

[프로그래머스 코딩테스트] n^ 2 배열 자르기(Java)

문제 설명 정수 n, left, right가 주어집니다. 다음 과정을 거쳐서 1차원 배열을 만들고자 합니다. n행 n열 크기의 비어있는 2차원 배열을 만듭니다. i = 1, 2, 3, …, n에 대해서, 다음 과정을 반복합니다. 1행 1열부터 i행 i열까지의 영역 내의 모든 빈 칸을 숫자 i로 채웁니다. 1행, 2행, …, n행을 잘라내어 모두 이어붙인 새로운 1차원 배열을 만듭니다. 새로운 1차원 배열을 arr이라 할 때, arr[left], arr[left + 1], …, arr[right]만 남기고 나머지는 지웁니다. 정수 n, left, right가 매개변수로 주어집니다. 주어진 과정대로 만들어진 1차원 배열을 return 하도록 solution 함수를 완성해주세요. 제한사항 1

[프로그래머스 코딩테스트] 오픈채팅방(Java)

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

[프로그래머스 코딩테스트] 튜플(Java)

문제 설명 셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다. (a1, a2, a3, …, an) 튜플은 다음과 같은 성질을 가지고 있습니다. 중복된 원소가 있을 수 있습니다. ex: (2, 3, 1, 2) 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플입니다. ex: (1, 2, 3) != (1, 3, 2) 튜플의 원소 개수는 유한합니다. 원소의 개수가 n개이고, 중복되는 원소가 없는 튜플 (a1, a2, a3, …, an)이 주어질 때(단, a1, a2, …, an은 자연수), 이는 다음과 같이 집합 기호 '{', '}'를 이용해 표..

[프로그래머스 코딩테스트] 실패율(Java)

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

[프로그래머스 코딩테스트] 예상 대진표(Java)

문제 설명 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. 게임은 최종 한 명이 남을 때까지 진행됩니다. 이때, 처음 라운드에서 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 몇 ..