목록코딩 일기장 (205)
와챠의 우당탕탕 코딩 일기장
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uLsXz/btqQNp2tpsZ/OoCzo6CMb7NzqgNnPlaVm1/img.png)
문제 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다. 출력 첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다. 풀이..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bwFyE0/btqQIbElESK/TG4a7tAanyVsMp8kCSZKt0/img.png)
문제 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 입력 첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. 출력 조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다. 풀이(JAVA)
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/caT5KW/btqM4z865AB/oknkC2uDDV5jAAn5O4Wa1k/img.png)
Composite Pattern Composite 패턴은 디렉터리와 파일의 관계처럼 재귀적인 구조를 가진 패턴이다. (Composite 패턴의 가장 기본적인 예는 파일과 디렉터리의 관계이다.) 재귀적인 구조란 디렉터리가 그릇 역할도 하고(디렉터리(그릇) 안에 파일(내용물)이 들어갈 수 있음), 내용물 역할도 할 수 있는 것을 말한다(디렉터리(그릇) 안에 디렉터리(내용물)를 넣을 수 있음). 하지만 저 예제는 흔하므로 나는 목표를 만드는 예제를 만들어 보았다. 목표에는 추상적인 목표, 구체적인 목표가 있고, 추상적인 목표는 추상적인 목표와 구체적인 목표를 포함할 수 있게 했다. 파일과 디렉터리로 설명하면 추상적인 목표는 디렉터리고, 구체적인 목표는 파일인 셈이다. DetailedGoal 클래스 = 구체적인..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dXCuUq/btqMVClEMjT/kwH52ShCIN9kqenSKtG240/img.png)
Strategy Pattern Strategy 패턴은 알고리즘을 쉽게 교체할 수 있는 패턴이다. 예제로는 플레이어가 레벨 1일 때는 쉬운 공격을 하고, 레벨 2일때는 어려운 공격을 하는 코드를 짜 봤다. Strategy 인터페이스 = 레벨에 따라 다른 공격을 구현하게 함 Level 1 클래스 = 레벨 1의 공격인 쉬운 알고리즘 구현 Level 2 클래스 = 레벨 2의 공격인 어려운 알고리즘 구현 (※원래는 attack에 알고리즘이 들어가야 하는데 간단하게 표현하고자 생략) Player 클래스 = 플레이어를 나타내는 클래스 장점 Player 클래스에 구체적인 Strategy 클래스(Level 1, Level 2)는 보이지 않는다. Strategy의 일이 필요할 때엔 필드인 strategy에게 위임(◇) 하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bxsSJ9/btqJ1MDuMEG/aM22ymMvY5xmyazsO0GEV0/img.png)
Singleton Pattern Singleton 패턴은 인스턴스가 하나만 생성되는 패턴이다. 예제로는 하나뿐인 닌텐도를 언니랑 동생이 같이 사용하는 내용이다. 요즘 닌텐도 스위치는 하나에 여러 계정이 있다는데 이 예제에서는... 언니와 동생이 하나의 계정을 같이 키우고 있다고 치자. 언니를 갖고 싶은 내 바람과 닌텐도를 갖고 싶은 내 바람을 섞어봤다. - : private + : public 밑줄 : static Singleton 패턴의 장점 (인스턴스를 하나만 생성하므로) 인스턴스가 상호간 영향을 주어 생기는 '예상치 못한 버그'를 생각하지 않고 프로그래밍할 수 있다. Singleton 패턴이 뭐하는 패턴인지 책 예제만 보고는 잘 이해가 되지 않았는데, 네이버 지식백과에 적힌 예를 보고 바로 이해가 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmPamf/btqJZn5eNeY/0aoNOeuof9vgqSDfKE37Ik/img.png)
Factory Method Pattern Factory Method 패턴은 상위 클래스에서 추상적인 공장과 추상적인 제품을 만들고(공장과 제품이 갖춰야 할 틀을 만들고), 하위 클래스에서 구체적인 공장과 구체적인 제품을 만드는 패턴이다. 그리고 이 패턴은 디자인 패턴 3번째에서 배운 Template Method 패턴의 응용이다. (제품 생산의 큰 흐름을 결정하는 Factory Method) 예제로는 추상적인 공장을 상속받아 과자 공장 클래스를 만들고, 추상적인 제품을 상속받아 행운 번호를 갖고 있는 과자 클래스를 만들어 보았다. framework 패키지 = 추상적인 틀을 결정하는 클래스들의 모음 Factory 클래스 = 공장이 갖추어야 할 틀을 가진 추상 클래스 create 메소드 = 제품 생산의 큰 흐..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/I9r1c/btqJix2ofZS/O8acaJYk4auTzz8lBYYtSK/img.png)
Template Method Pattern Template Method 패턴은 하위 클래스에서 구체적으로 처리하도록 하는 패턴이다. template(견본)의 뜻처럼 부모 클래스에서 큰 형식을 지정해주면, 자식 클래스가 그 큰 형식에 맞추어 구체적인 일을 하도록 하는 패턴이다. 이력서처럼 형식이 정해져 있는 것에 내가 그 칸을 하나하나 구체적으로 채우는 느낌이다. 예제로는 레시피 형식에 맞추어 쿠키 레시피와 파이 레시피를 작성하는 코드를 짜보았다. AbstractRecipe = 레시피의 큰 흐름을 구성하는 Template Method를 가진 추상 클래스 printRecipe 메서드 = ready, bake, decoration를 이용해 레시피의 큰 흐름을 구성(Template Method) 자식이 @Ove..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bipJDD/btqINor1zbN/eTZUM1Ntg4qp2JxOZzudXk/img.png)
Adapter Pattern Adapter 패턴은 말 그대로 어댑터 역할을 하는 패턴이다. 원래 있는 것을 필요한 형태로 수정해서 재활용하는 역할을 한다. (내가 가지고 있는 것과 내가 원하는 것 사이를 연결해주는 패턴이다.) 아래와 같은 느낌이다. 내가 가지고 있는 것 내가 원하는 것 아래 예제는 내가 갖고 있는 5핀 충전기에 어댑터를 껴서 내가 원하는 C타입 충전기로 만들어 이북 리더기를 충전하는 예제이다. 쉽게 표현하면 아래와 같다. 5핀 충전기 C타입 충전기 --> 이북 리더기 Adapter 패턴에는 총 2가지 종류가 있다. 하나는 상속을 이용한 Adapter 패턴이고, 하나는 위임을 이용한 Adapter 패턴이다. 1, 상속을 이용한 Adapter 패턴 Main = 이북 리더기를 충전하는 나 C..