본문 바로가기

Category

(28)
백준 1018 : 체스판 다시 칠하기 문제 바로 가기https://www.acmicpc.net/problem/1018 접근 방법 Step1. 체스판 자르기문제에서 주어진 체스판의 크기는 항상 8 x 8 사이즈가 아니기 때문에, 8 x 8 이상의 크기를 가지는 체스판이라면 해당 체스판에서 나올 수 있는 체스판의 종류는 여러 가지가 나올 수 있다.가령 9 x 9 크기의 체스판이 있다면 이는 아래와 같이 4가지 버전으로 나누어질 수 있다.우리가 필요한 것은 위의 4가지 버전의 체스판 중에서 가장 적게 다시 칠해도 되는 체스판을 선택하는 것이다.즉, 각각의 체스판에서 다시 칠해야 할 칸 수를 세어보고, 다음 체스판에서 다시 칠해야 할 칸 수와 비교해보면서 모든 체스판을 비교해야 하는 브루트 포스 접근이 필요한 것이다. Step 2. 체스판의 최소 ..
백준 1024 : 수열의 합 문제 바로 가기https://www.acmicpc.net/problem/1024 접근 방법연속된 수의 합을 구하는 방법에 대한 규칙을 찾는 것이 핵심이다.연속된 수의 합을 구하는 방법은 다양한 방법을 사용할 수 있겠지만, 나는 가장 작은 수와 가장 큰 수를 더해서 연속된 갯수만큼 곱한 후 2로 나누는 방법을 사용했다.예를 들어서 `3, 4, 5, 6, 7` 이라는 연속된 숫자가 있다고 생각해보자.가장 작은 수와 가장 큰 수를 모두 더해보면 아래와 같이 될 수 있다.`3 + 7 = 10``4 + 6 = 10``5 + 5 = 10``6 + 4 = 10``7 + 3 = 10``10 \times 5 = 50` 은 3부터 7까지 합한 값의 2배가 된다. 따라서 2로 나누어주면 3부터 7까지 연속된 수의 합인 25..
백준 1065 : 한수(자바) 문제 바로 가기https://www.acmicpc.net/problem/1065 접근 방법한수의 규칙을 적용할 수 있는 함수를 하나 생성해서 그대로 구현하면 된다. 다만, 한수의 규칙을 생각해 보면 1 이상 100 미만의 숫자는 모두 한수에 해당하고 해당 범위 사이의 숫자를 입력받는다면 해당 숫자가 한수의 개수가 된다. 이 점을 고려하면 계산 과정을 조금은 줄일 수 있다. Step 1.한수를 구하는 함수인 isArithmeticSequence를 구현하지 않고 단순히 정의만 해둔 상태에서 위에서 다룬 로직을 구현한다.BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWr..
백준 1057 : 토너먼트 (자바) 문제 바로 가기https://www.acmicpc.net/problem/1057 접근 방법수학적인 규칙을 찾으면 될 것 같다는 생각은 했지만, 수학적 규칙을 빠르게 찾아내지 못하는 편이라 고민을 좀 했다. 수학적인 규칙을 찾았다면 코드를 작성하는 것은 빠르게 끝낼 수 있다.Step 01. 규칙 찾기라운드마다 참가자의 번호는 갱신된다. 따라서 누가 토너먼트에서 이겼는지 정확한 번호를 아는 것은 크게 의미가 없다. 라운드마다 번호를 매기는 순서는 처음 번호의 순서를 유지한다는 규칙이 있기 때문에 이 점을 고려하여 규칙을 생성할 수 있다.1과 2는 함께 대결하게 되고, 다음 라운드에서 이 둘 중 하나가 다음 라운드에 진출했을 때 진출한 사람은 다시 참가 번호 1번을 얻게 된다. 이때의 규칙을 살펴보면 참가자의..
백준 4673 : 셀프 넘버 (자바) 문제https://www.acmicpc.net/problem/4673 접근 방법Step 1.셀프 넘버가 아닌 숫자를 찾아내는 함수를 정의한다.주어진 수에 대해 주어진 수와 주어진 수의 각 자릿수를 합하여 새로운 수를 생성하는 함수를 작성하고, 새로운 수를 1부터 10000까지 담긴 배열에서 제거하는 로직으로 구현할 예정이다.public static int kaprekar(int number) { int sum = number; while (number != 0) { sum += number % 10; number = number / 10; } return sum;}main 함수가 static이기 때문에 kaprekar 함수도 static으로 만들어준다. St..
2023년 12월 회고 결국 2024년을 맞이하고 나서야 2023년 12월 회고 글을 쓴다🙃 2023년의 11월 중순부터 참여한 한화시스템 BEYOND SW 캠프 덕분에 2023년의 마지막 두 달인 11월과 12월은 정말 밀도 높게 시간을 보낼 수 있었다. 1년이란 전체 시간 중 가장 몰입했던 두 달이었고, 몰입했던 만큼 정말 순식간에 지나갔다. 한번 빠르게 정리해 보자! 자바와 함께한 12월 12월 초 데이터베이스 미니 팀 프로젝트를 종료함과 동시에 바로 자바 수업에 들어갔다. 자바를 본격적으로 활용한 지는 대략 2년이 조금 안 된 것 같은데 항상 자바에 대한 확신이 없었다. 계속 사용은 하고 있지만 어딘가 비어있는 듯한 느낌을 많이 받았고, 그렇다고 해서 다시 처음부터 꼼꼼하게 복습하기에는 상당한 시간이 걸릴 것 같아 엄두..
MySQL의 ENUM 타입 최근 데이터베이스 설계 프로젝트를 진행하면서 ENUM 타입에 대해 잘못 알고 있던 부분이 있어서 기록을 해두려고 한다. 설계 프로젝트는 MariaDB로 진행했지만 MySQL과 큰 차이가 없을 것이라고 보고 MySQL 기준으로 내용을 작성하려고 한다. MySQL의 ENUM 타입 MySQL에는 ENUM 타입이 존재하는데, SET타입과 마찬가지로 내부적으로 숫자 값으로 매핑해서 관리하는 타입이다. 테이블 자체를 설계하면서 그 구조에 나열된 목록 중에 하나의 값을 가질 수 있다. 글로 설명하는 것보다 SQL 쿼리문 자체를 바로 확인해 보자. CREATE TABLE jdm ( engine ENUM ('B16B', 'RB26DETT', '2JZ-GTE') ); INSERT INTO jdm VALUES ('B16B'..
2023년 11월 회고 어느덧 2023년도 1달 남짓 남았고, 11월도 이제 마무리되어 가는 시점에 나의 첫 번째 회고글을 작성해보려고 한다. 11월에는 나에게 뚜렷한 가시적인 성과는 없었지만, 그럼에도 변화의 기회가 된 순간들이 많았다. 우아한 테크코스 프리코스 작년에도 지원하고 싶었지만, 졸업 작품 완성에 조금 더 집중하고 싶다는 생각에 작년에는 지원을 포기했었다. 졸업 작품 개발과 동시에 함께 지원했던 창업 프로그램의 최종 발표도 앞두고 있었기 때문에 여러모로 바쁘게 시간을 보냈던 것 같은데 시간이 지나고 생각을 해보니 "졸업 작품에 집중"이라는 이유는 핑계에 불과했던 것 같다. 좀 더 솔직해져 본다면 당시 익숙하지 않았던 자바와 어설프게 알고 있는 스프링 프레임워크를 가지고 웹 백엔드 개발을 하면서 어쩌면 스스로 한계를..