자바(20)
-
[알고리즘/자바] 백준 2941번 - 크로아티아 알파벳
2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 입력된 문자의 갯수를 세는 프로그램을 만드는 문제다. 입력된 문자중에는 크로아티아 알파벳이라고 해서 2개이상의 문자가 조합되어 1개의 문자를 의미하는 케이스가 존재한다. 아이디어 입력받은 문자에서 크로아티아 알파벳의 갯수를 센다. 또한 크로아티아 알파벳이 있다면 "_" 문자 형태로 치환한다. 치환된 문자에서 "_"가 아닌 문자의 갯수를 센다. 구현 구현 하면서 주의할 점은 크로아티아 알파벳이 있는지 검사할때 긴문자부터 수행해..
2021.07.26 -
[알고리즘/자바] 백준 5622번 - 다이얼
5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 전화기의 번호를 누르기 위해선 몇초간 기다리는 시간이 필요하며, 각 번호에는 3~4개 알파벳이 매핑 되어있다. 입력은 번호가 아닌 알파벳으로 주어지며 이 알파벳을 보고 전화를 거는데 걸리는 시간을 구하는 문제다. 첫번째 아이디어. 문제에 각 알파벳을 선택하는데 소요되는 시간은 이미 확정 되어있다. A,B,C는 3초가 소요되며 D,E,F를 선택할때는 4초가 걸린다. 아스키 코드를 통해 문자를 10진수 정수로 변환했고 아래와 같은 방법으로 알파벳을 선택하는데 걸린 시간을 구했다. 이런식으로 풀면 정답일줄 알았는데 한가지 실수가 있었다. (위에 형광펜..
2021.07.14 -
[알고리즘/자바] 백준 2164번 - 카드2
2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제에서 알려준 동작을 정직하게 Java의 Stack을 통해 구현했다. 1부터 N까지의 숫자를 Stack에 넣고, while문을 통해 문제에서 제시한 동작을 수행하도록 했다. 아니나 다를까 시간초과ㅠㅠ 이렇게 하면 정답은 나오겠으나 입력 N이 커질수록 수행 속도가 떨어져 시간초과가 발생한다. 아래는 시간초과가 발생했던 코드. ( Java의 Stack을 썻던 이유는 Queue와 달리 Stack은 add를 통해 Top이 아닌 Bottom에도 데이터를 넣을 수 있기때..
2021.05.28 -
[디자인패턴] 커맨드 패턴(Command Pattern)
Head First Design Patterns를 읽고 학습한 내용을 기록합니다. 0. 커맨드 패턴 정의 아래는 책에 쓰여있는 커맨드 패턴의 정의. 커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능합니다. 커맨드 패턴은 결과를 위한 계산과정의 각 부분들을 캡슐화 시킬 수 있다. 계산의 결과를 원하는 클라이언트는 사실 과정은 궁금하지 않고 결과만 올바르게 출력되면 된다. 이런 Needs에 의해 커맨드 패턴은 계산과정을 캡슐화하고, 클라이언트는 단순히 계산을 해달라는 명령만 수행함으로써 원하는 결과를 얻어낼 수 있다. 실습을 하면서 조..
2021.03.07 -
[Design Pattern] 싱글턴 패턴(Singleton Pattern)
Head First Design Patterns를 읽고 학습한 내용을 작성합니다. 0. 싱글턴 패턴의 정의와 필요성 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다. 사실 얼핏보기에는 이게 패턴까지 될필요가 있나싶다. 전역변수 하나면 쉽게 해결될 문제인것같다. 하지만 인스턴스를 전역변수로 셋팅하면 하면 해당 파일이나 화면이 로딩 될때 항상 생성된다. 전혀 사용되지 않는 경우에도 말이다. 거기다 해당 인스턴스가 상당히 많은 양의 리소스를 소모한다면 사용하지도 않는데 성능까지 저하시킬수도 있다. 또한, 소스코드 어딘가에 인스턴스를 추가로 생성하는 코드가 있다면 이를 방지할 방법이 없다. 1. 고전적인 싱글턴 패턴 1 2 3 4 5 6..
2021.03.05 -
[Design Pattern] 팩토리 패턴(Factory Pattern)
Head First Design Patterns를 읽고 학습한 내용을 기록합니다. 0.개요 (손이 좀더 가더라도)조건문을 클래스로 뽑아내서 관리할때가 더 좋은 경우가 있다. 조건문의 내용이 객체 인스턴스를 만드는 작업이라면 더욱더 그렇다. 객체의 인스턴스를 만드는 작업이 항상 공개되어 있어야하는것은 아니며, 오히려 공개를 했다간 클래스간 결합에 관련된 문제가 발생할 수 있기 때문이다. 이전 패턴을 학습할때 Duck이라는 인터페이스를 써서 각종 오리 인스턴스 생성에 유연하게 대처했다. 1 Duck duck = new MallardDuck(); cs 하지만 아래처럼 일련의 구상 클래스(각종 오리)들이 있을때는 부득이하게 조건문을 통해 인스턴스화를 수행할 수 밖에 없다. [ 이 코드만 보면 크게 문제 될건 없..
2021.03.02