전체 글

java/이펙티브자바

2장 객체 생성과 파괴

이전부터 이펙티브 자바 책을 보고 싶었는데, 2월 한 달 동안 이 책을 보려고 한다. 원래는 클린 코드를 마저 보려고 했으나 자바를 깊이 있게 이해하고, 공부한 후에 클린 코드 책을 보는 것이 더 도움이 될 것 같아 이펙티브 자바를 먼저 보게 되었다. 그동안 깊게 생각하지 않고 권장되는 방법으로 사용하던 것들도 있고, 지양해야 하는 방법을 사용한 적도 있다. 앞으로 짜게 될 코드들은 모두 이유가 있는 코드들이길 바란다. 2장은 객체를 생성하고 파괴하면서 주의해야 할 점들에 관한 내용이다. 객체를 어떻게 생성하는지, 어떤 객체를 생성해야 하는지, 파괴를 언제 어떻게 하는지 등과 같이 알고 사용하면 너무 좋은 내용들로 구성되어 있었다. 싱글톤이면 어떤 것이 좋은지 모르고 싱글톤으로 만들어 사용하거나, 의존 ..

카테고리 없음

백준 - 12851 숨바꼭질2

문제 https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net 수빈이가 움직일 수 있는 방법은 3가지이고 동생이 있는 위치까지 갈 수 있는 가장 빠른 시간과 그 시간으로 찾는 방법의 개수를 구하는 문제였다. 수빈이는 1초 후에 다음과 같이 이동할 수 있다. X-1 X+1 X*2 문제 풀이 처음에는 DP만을 가지고 이 문제를 풀려고 했는데, 방법의 개수를 구하는 것이 너무 어려웠다.. 직전에 갱신한 방법이 무엇인지도 ..

알고리즘/구현

백준 - 14500 테트로미노

문제 https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 주어진 맵에서 각각의 테트로미노를 회전, 대칭해서 최댓값을 찾는 문제였다. 문제 풀이 500x500의 맵이고 회전과 대칭을 한 테트로미노의 총 개수가 19개였다. 대략 5,000,000 정도가 나왔고, 각각의 합을 더해줄 때 각 테트로미노마다 4번의 연산이 필요하기 때문에 20,000,000 정도가 나왔다. 제한 시간이 2초로 아주 넉넉했기 때문에 완전 탐색으로 풀었다. 처음에는 회전하는 메..

카테고리 없음

프로그래머스 - 49189 가장 먼 노드

문제 https://school.programmers.co.kr/learn/courses/30/lessons/49189 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1번 노드에서 가장 멀리 떨어진 노드의 개수를 구하는 문제였다. 문제 풀이 n이 최대 20000이어서 플루이드 워셜 알고리즘을 사용하면 시간 초과가 날 것 같아서 BFS로 각 노드까지의 거리를 구했다. BFS는 레벨 별로 탐색하기 때문에 탐색할 때마다 dist 배열을 갱신했다. 그리고 탐색할 때마다 최대 dist를 계속 갱신해줬다. 마지막에 최대 dist와 dist가 같은 노드들의 개수를 세..

알고리즘/구현

프로그래머스 - 12927 야근 지수

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12927# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 야근을 하고 남은 일의 제곱의 합의 최솟값을 구하는 문제였다. 문제 풀이 남은 일의 제곱의 합을 구해야 하기 때문에 큰 수를 최대한 줄여야 했다. 만약 works가 [10, 10, 8, 6, 4]가 있고 N이 5라면 합이 최소가 되기 위해서는 일을 한 결과가 [8,8,7,6,4]가 되어야 한다. 이렇게 하기 위해서 먼저 works를 내림차순으로 정렬했고, N만큼 반복하면서 현재 work에서..

알고리즘/DFS BSF

백준 - 16637 괄호 추가하기

문제 https://www.acmicpc.net/problem/16637 16637번: 괄호 추가하기 첫째 줄에 수식의 길이 N(1 ≤ N ≤ 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가 www.acmicpc.net 왼쪽부터 계산하는 수식에 괄호를 추가해 식의 최댓값을 구하는 문제였다. 문제 풀이 처음에 이 문제를 굳이 그리디로 풀려고 시도하다가 조건이 너무 많아져서 실패했다. 그냥 dfs로 푸니까 쉽게 해결됐다.. dfs를 할 때, 다음 연산을 바로 하는 경우와 다음 숫자와 다다음 숫자가 다다음 연산을 먼저 하는 경우로 나뉘게 하면 된다. #define _CRT_SECURE_NO_WAR..

알고리즘/구현

백준 - 16926 배열 돌리기 1

문제 https://www.acmicpc.net/problem/16926 16926번: 배열 돌리기 1 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net 크기가 NxM인 배열을 한 줄씩 나눠서 R번 회전한 결과를 출력하는 문제였다. 문제 풀이 배열이 최대 300 x 300 크기고, 돌리는 횟수도 최대 1000번이라 실제로 다 돌려도 최대 90000000이어서 아슬아슬하게 제한 시간을 통과할 수는 있을 것 같았다. 하지만 다른 방법을 이용해 풀었다. ..

알고리즘/구현

백준 - 22234 가희와 은행

문제 https://www.acmicpc.net/problem/22234 22234번: 가희와 은행 가희는 창구가 하나인 은행을 운영하고 있습니다. 가희의 은행이 영업을 시작했을 때, 대기 줄에는 손님이 N명 있습니다. [그림 1] 카운터 직원과 N명의 손님 x번 손님에 대한 정보는 x번 손님의 www.acmicpc.net 1초마다 현재 처리하고 있는 고객의 id를 출력하는 문제였다. 손님들은 순서대로 줄을 서 있으며 한 번에 한 손님에게 할당할 수 있는 시간이 정해져있다. 할당된 시간이 끝나면 시간이 남은 손님일 경우에는 줄의 맨 뒤로 간다. 문제 풀이 queue를 이용해 풀 수 있었는데, 이때 queue에 넣는 순서가 중요하다. 영업 이후에 들어온 손님은 들어온 시간까지 알아야 하기 때문에 구조체를 ..

hahihi
히호 노트