본문 바로가기

분류 전체보기

(328)
[백준] 6593번 : 상범 빌딩 6593번: 상범 빌딩 6593번: 상범 빌딩 당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어 www.acmicpc.net 🤔 문제분석 3차원 배열에서 너비우선탐색을 이용하면 된다, 가로,세로,높이를 입력받고 갈수 있는 방향은 6가지로 모든 경우의수를 너비우선탐색으로 방문해가면서 도달 할 수 있는지 체크하면 된다. 💻 코드 import sys from collections import deque input = sys.stdin.readline moves = [(0, 0, 1), (0, 1, 0), (1, 0, 0), (0, 0, -1), (0, -1, 0), (-1..
열거 타입과 에너테이션 머리말 이번장은 열거타입과 애너테이션으로 자바에서 열거타입을 어떻게 사용하고 또 애너테이션은 어떤 기능을 가지고 있고 어떤 상황에쓰는지 파악해 보는 시간을 갖도록 하겠습니다. int 상수 대신 열거 타입을 사용하라 아래와 같이 int 상수 대신하여 enum 타입을 사용하교 int 상수형을 지향하라 public static final int APPLE = 0; public static final int BANANA = 1; public static final int ORANGE = 2; public enum Fruit { APPLE, BANANA, ORANGE; } 전략 열거타입 요일별로 일한 만큼의 수당을 계산해주는 enum 타입인데, 그 안의 하위 타입으로 평일과 주말을 나누고 위임하여 계산한다. pu..
제네릭 머리말 친구가 이팩티브 자바 책을 읽으면서 가장 어려웠던 부분이 제네릭이라고 해서 더욱더 열심히 보았던 파트였습니다. 5장을 읽으면서 자바 제네릭에 대하여 학습해보고, 제네릭의 장점을 살리고 단점을 최소화 하는 방법을 이번장을 통해서 익히도록 하겠습니다. 용어정리 공변, 반공변 타입 : 리스히코프 치환법칙을 적용할 수 있는 타입 **타입끼리 다운캐스팅(공변), 업캐스팅(반공변)**이 가능한 타입 // 공변성 Object[] Covariance = new Integer[10]; // 반공변성 Integer[] Contravariance = (Integer[]) Covariance; // 공변성 ArrayList Covariance = new ArrayList(); // 반공변성 ArrayList Contr..
클래스와 인터페이스 머리말 객체지향 프로그래밍에서의 가장 중요한 클래스와 인터페이스 Java에서는 클래스와 인터페이스를 어떤식으로 사용 권장 하는지 알아보는 시간을 갖도록 하겠습니다. 클래스와 맴버의 접근 권한을 최소화하라. 소프트웨어가 정상 동작하는 이상 항상 가장 낮은 접근 수준을 부여하라. 구현과 API를 깔끔하게 분리하자 오직 API를 통해서만 다른 컴포넌트와 소통하며, 내부 동작 방식에는 절때 개의치 말아야 한다. 정보은닉, 캡슐화는 소프트웨어 설계에 되는 원리이다. 클래스는 private-package와 public이 있는데 API를 제공해야하는 객체라면 public, 패키지 내에서 사용되는 클래스라면 private-package를 사용하라 API를 공개하는순간 내부 구현이 아니므로 관리의 대상이 된다. priv..
모든 객체의 공통 메서드 머리말 객체가 공통으로 사용하는 메서드가 무엇이 있고, 어떻게 다뤄야하는지 알아보는 시간을 갖도록 하겠습니다. Object에서 제공하는 equals(), hashCode(), toString(), clone(), finalize()는 모두 재정의(overriding)을 염두해 두고 설계한것이다. HashMap, HashSet에서 해당 Object를 사용하려면 equals()와 hashCode()를 오버리이딩 해서 구현해야한다. Compareable 인터페이스는 CompareTo()를 구현해야하는데 이부분은 배열의 정렬이나, TreeMap, TreeSet에서 해당 Object를 사용하려면 구현을 해야한다. equals는 일반 규약을 지켜 재정의 하라 자기자신은 true를 반환해야한다. 해당인스턴스가 아니라..
[백준] 2458번 : 키 순서 2458번: 키 순서 🤔 문제분석 플로이드 워셜로 문제를 접근하면 됩니다. s에서 g로 갈 수 있는 경로가 존재한다는것을 모두 파악한 뒤에 해당 그래프가 다른 그래프와 모두 연결되어있는지 확인하면 됩니다. 💻 코드 import sys input = sys.stdin.readline N, M = map(int,input().split()) arr = [[0] * (N+1) for _ in range(N+1)] for _ in range(M): small, big = map(int,input().split()) arr[big][small] = 1 for k in range(1,N+1): for s in range(1,N+1): if k==s: continue for g in range(1,N+1): if g..
[백준] 17822번 : 원판 돌리기 17822번: 원판 돌리기 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 🤔 문제분석 원판을 구성하는걸 배열로 생각하여 문제를 해결하면 쉽게 해결 할 수 있습니다. i좌표는 첫번째와 마지막 좌표를 비교하지 않아야하고, i일때 (i+1, i-1) 만 비교하면된다. j좌표는 j가 0일때 M-1를 확인해야하고 j가 M-1일때 0을 확인해야하고 또한 j일때 (j+1, j-1) 확인해야한다. 위의 논리라면 filter 함수를 구현하였는데 filter는 x값을 -1이나 M으로 넘어가면 M-1, 0으로 치..
상태(State) 패턴 ❓ 사용 이유 특정 객체가 논리적으로 상태를 갖고 그 상태에 따라서 다른 동작을 해야 할 경우 상태를 여러개를 갖고있어 다중 분기처리를 해야하는 경우 🤔 의도 객체의 상태에 따라서 다른 동작을 하도록 한다. 전력패턴과 달리 클라이언트가 해당 전략을 선택하는게 아니라 상태가 내부에서 바뀌도록 함 💻 구현 Context 인터페이스와 State인터페이스를 갖는다. 클라이언트는 Context 인터페이스를 사용하고, Context 구현체는 State 인터페이스에 기능을 위임한다. Context 인터페이스에 changeState를 구현하지 않고 내부안에서 변경 할 수 있도록 한다. State 구현체들은 Context의 State를 해당 동작과 함께 변경하도록 한다. ( Context의 State는 State 구현체..