분류 전체보기
-
싱글톤 디자인 패턴에 대해One Cookie a day 2023. 10. 16. 19:36
🎾 싱글톤 패턴이란 무엇인가? 하나의 클래스 당 하나의 인스턴스만을 가지고 재사용하는 디자인 패턴을 말한다. 하나의 인스턴스만 사용하기 때문에 메모리를 효율적으로 사용하고, 객체들 간 데이터 공유가 쉽지만, 그만큼 여러 단점도 가지고 있어 안티패턴으로 불리기도 한다. 첫 번째로, 싱글톤 패턴을 구현하는 코드들이 많이 필요하며, (멀티스레드 환경에서의 동시성 문제 해결을 위한 코드 등) 테스트 시 매번 인스턴스 상태를 초기화하는 작업이 필요하다. 싱글톤 객체가 너무 많은 로직을 가지고 있어 여러 객체들이 공유해서 사용한다면, 객체들 간 결합도가 높아져서 OCP(개방폐쇄원칙 - 확장에는 열려있고 수정에는 닫혀있다, 기존의 코드를 변경하지 않으면서 기능을 확장할 수 있어야 한다) 위배할 확률이 높다. 🎾 어떻..
-
백준 23288Java/코딩테스트 2023. 10. 13. 20:04
🎲 백준 23288 주사위 굴리기 2 https://www.acmicpc.net/problem/23288 23288번: 주사위 굴리기 2 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 가장 왼 www.acmicpc.net 🎲 어릴때부터 이런 입체도형 계산하는 문제를 유구하게 못했는데 ..주사위 돌아가는거 생각하는게 헷갈렸다ㅎ 🎲 주사위 돌아가는 부분을 이 블로그를 보고 힌트를 얻었다. 🎲 주사위 🎲 주사위 자체를 현재 방향에 따라 위 이미지처럼 계속 돌려가면서, 아랫면 (dice[3][1]) 만 점수 비교하는데 쓰면 된다. 🎲 자료구조 private stati..
-
백준 20055Java/코딩테스트 2023. 10. 13. 19:36
🤖 백준 20055 : 컨베이어 벨트 위의 로봇 https://www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 🤖 쉬웠는데, 딱 한 조건 빼먹어서 고생한 문제...부들부들... 🤖 나는 컨베이어벨트가 두 줄이고, 첫 줄의 마지막 원소를 두 번째 줄의 마지막에, 두 번째 줄의 첫 원소를 첫 줄의 맨 앞에 넣는 것을 보고 LinkedList를 사용하면 되겠다고 생각했다. 🤖 그리고 문제 조건에서 보면 알겠지만, 결국 로봇은 첫 줄에서만 움직..
-
백준 19237Java/코딩테스트 2023. 10. 12. 23:54
🦈 백준 19237 : 어른 상어 https://www.acmicpc.net/problem/19237 19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net 🦈 생각보다 괜찮게 풀었던 문제. 마법사 상어와 복제마법 문제와 로직이 어느정도 겹치는 느낌이 있다. (냄새 배열을 3차원으로 만드는 것 등) 🦈 Static 변수들 // 상 : 0, 하 : 1, 좌 : 2, 우 : 3 private static int[] dirX = { -1, 1, 0, 0 }; // 상하좌우 순 p..
-
백준 20057Java/코딩테스트 2023. 10. 12. 01:37
🌪 백준 20057 : 마법사 상어와 토네이도 https://www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 🌪 저번 글에 열받았다고 썼는데 플래그였던 것이다..... 얘가 더...더 힘들었다... 🌪 로직 자체는 토네이도 움직이기, 한 칸씩 움직일때마다 모래 날려주기 이렇게 2가지만 있다. 🌪 하지만 날아가는 각 모래를 모두 계산해줘야 하기 때문에 실수하기 쉽고, 어디서 틀렸는지 잘 안보여서 헤맨...문제이다. 🌪 토네이도의..
-
백준 21608Java/코딩테스트 2023. 10. 11. 18:10
🦈 백준 21608 : 상어 초등학교 https://www.acmicpc.net/problem/21608 21608번: 상어 초등학교 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호 www.acmicpc.net 🦈 앞에서 풀었던 상어의 파이어볼보다 더 열받는 문제였다. 🦈 문제 순서대로 구현하면 되는 문제이기는 하지만, 조건이 매우 복잡하여 틀린부분을 수정하는데 오래 걸렸다. 🦈 나는 아래 부분을 실수했었다. 마지막 칸 하나만 남았을 때는 무조건 그 칸으로 들어갈 수 밖에 없다. 방문 처리를 확실히 할 것. 학생 번호를 편의상 0부터 배치했더니, 이미 자리..
-
백준 20056Java/코딩테스트 2023. 10. 10. 18:51
🔥 백준 20056 : 마법사 상어와 파이어볼 https://www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 🔥 삼성 기출인 상어 시리즈 문제이다. 🔥 파이어볼 클래스를 하나 만들고, 위치 정보 + 방향, 속력, 질량을 필드로 선언해주었다. private static class Fireball { int x; int y; int mass; int speed; int dir; public Fireball(int x, in..
-
Java 7 이상에서 ArrayList 크기 계산 시 비트 연산자를 활용하는 이유One Cookie a day 2023. 10. 10. 18:11
이전 포스팅에서 ArrayList는 어떻게 동적으로 크기를 늘려줄 수 있는지에 대해 Java 6, 7, 8 버전의 차이를 비교했었다. 2023.10.09 - [One Cookie a day] - ArrayList는 어떻게 동적으로 크기를 늘릴 수 있을까? ArrayList는 어떻게 동적으로 크기를 늘릴 수 있을까? 이전에 CS 스터디에서 ArrayList와 LinkedList의 차이에 대해 공부한 적이 있다. ArrayList 배열과 유사하나 크기를 지정하지 않고 동적으로 값을 삽입하고 삭제할 수 있음 초기 용량이 다 차면 더 큰 Array bubblebubble.tistory.com 위 글에서도 알 수 있듯, Java 6에서는 늘려줄 크기를 ( 현재 배열의 크기 * 3 ) / 2 + 1라는 계산식을 통..