본문 바로가기

전체 글

(187)
[Python] 7570. 줄세우기(골3) / 그리디 목차 1. 문제 2. 핵심 아이디어 3. 코드 4. 배운 점 1. 문제 https://www.acmicpc.net/problem/7570 7570번: 줄 세우기 입력은 2 개의 줄로 이루어져 있다. 첫 줄에는 어린이 수를 나타내는 정수가 주어진다. 둘째 줄에는 처음에 줄서있는 어린이들의 번호가 차례대로 주어진다. 주어진 번호들 사이에는 공백이 하 www.acmicpc.net 2. 핵심 아이디어 처음에는 가장 긴 증가하는 수열만큼 아이들을 남기고 규칙에서 어긋나는 아이들만 재배치를 해주면 된다고 생각했다. 그래서 O(nlogn)으로 LIS 알고리즘을 구현해주었는데 틀렸다는 것을 보고 멘붕이 왔다. >>틀렸던 코드 import sys from bisect import bisect_left input = la..
[자바의 정석] ch12. Generics / enums / annotation 1. 지네릭스(Generics) 더보기 - 컴파일 시, 타입체크를 해주는 기능 => 타입안전성 상승 - 의도하지 않은 객체 저장 예방 - 잘못된 형변환 오류 예방 - 클래스와 메서드에 선언 가능 >>지네릭 클래스의 선언 :클래스를 작성할 때 Object 대신 T같은 타입변수를 사용 >>지네릭스 용어 => Box과 Box는 같은 클래스이다. => Box에 서로 다른 타입을 대입하여 호출한 것일 뿐 >>지네릭스 제한 - static 멤버에 T사용 불가 : 모든 객체에 대해 동일해야 하는데 변수가 다르기 때문 - 지네릭 타입의 배열 x => new T[10] ==> new 연산자는 컴파일 시점에 타입 T가 무엇인지 알아야 하는데 T가 어떤 타입이 될지 알수 없음 >>지네릭 클래스의 객체 생성과 사용 1) 참조..
[객체지향의 사실과 오해] ch3. 타입과 추상화 >>추상화 >> 추상화를 통한 복잡성 극복 추상화 : 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 놀라운 본질을 드러내는 과정 - 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법 - 추상화의 수준, 이익, 가치는 목적에 의존적 >> 방법 2가지 1) 일반화 : 공통점을 취하고 차이점을 버림 2) 불필요한 세부사항을 제거 >>개념 : 객체를 분류하는 기준 - 공통점을 기반으로 객체들을 묶기 위한 그릇 => 개념을 기반으로 그룹으로 분류 => 개념 그룹 ∋ 개체 : 개체를 개념의 인스턴스라고 함 >> 개념의 3가지 관점 : 심볼 / 내연 / 외연 - 심볼 : 개념을 가리키는 간략한 이름이나 명칭 ex) 트럼프 - 내연 : 개념의 완전한 정의 / 내연의 의미를 이용해 객체가..
[자바의 정석] ch11-3.컬렉션 프레임워크 : HashMap/TreeMap / Collections 1. HashMap 더보기 - Map 인터페이스를 구현 - key와 value를 하나로 묶어서 하나의 데이터(entry)로 저장 - 순서를 유지하려면 LinkedHashMap클래스를 사용 => Entry라는 내부 클래스를 정의하고, Entry 타입의 배열을 선언하고 있음 비 객체지향적 객체지향적 코드 Object [] key; Object [] value; Entry [] table; class Entry{ Object key; Object value; } => (key, value) 를 (Object, Object)형태로 저장 >>메서드 - entry값 : entrySet => Set - key 값 : keySet => Set - value값 : values() =>Collection 반환 ex1) 같..
[객체지향의 사실과 오해] ch2. 이상한 나라의 객체 / 상태 -행동 -식별자 목차 1. 객체, 그리고 이상한 나라 2. 객체 : 상태+ 행동+식별자 3. 행동 초점의 객체 설계 : 행동이 상태를 결정한다 4. 소프트웨어는 현실의 모방이 아니다 : 의인화+은유 1. 객체, 그리고 이상한 나라 >> 앨리스 객체 - 앨리스의 상태(키)를 결정하는 것은 행동임 - 행동의 결과로 상태가 영향을 받음 - 행동의 성공여부(문을 열고 들어감)는 이전에 어떤 행동들이 발생했는지(음료, 케잌 등등)에 영향을 받음 요약 1) 앨리스는 상태를 가지며 상태는 변경가능하다 - 키/ 위치 등은 변경가능함 2) 앨리스의 상태를 변경시키는 것은 앨리스의 행동이다. - 행동의 결과는 상태에 의존하며 상태를 통해 서술가능하다 - 행동의 순서가 결과에 영향을 미친다. 3) 앨리스는 어떤 상태에 있더라도 유일하게 식..
[자바의 정석] 11-2.컬렉션 프레임워크 : iterator / Arrays / Comparator / Set 1.5 Iterator 더보기 - 컬렉션에 저장된 요소 접근에 사용 - iterator() : iterator 반환 메소드 - 컬렉션에 정의=> 자손인 List/Set에도 호출 가능 - List : 순서가 저장됨 - Set : 순서가 저장x - Map은 직접호출 불가 => EntrySet이나 keySet로 collection 얻어온 후, 호출 가능 >>메서드 ex) package ch11; import java.util.*; public class IteratorEx1 { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("1"); list.add("2"); list.add("3"); list.add("4..
[객체지향의 사실과 오해] ch1. 협력하는 객체들의 공동체/ 협력-역할-책임 목차 1. 서론 2. 기존의 객체지향 묘사 3. 객체의 3요소 : 협력, 역할, 책임 4. 협력 속에 사는 객체 5. 객체지향의 본질(핵심) 1. 서론 객체지향이란 무엇인가? => 이 질문에 대한 자신만의 견해를 가지는 것이 중요하다 => 그러나, 많은 개발자는 객체지향을 여전히 클래스나 상속을 중심으로 바라본다. 다음 책에서는 총 3가지 관점의 변화를 유도한다. 첫째, 클래스 중심 => 객체 중심 관점 둘째, 객체를 독립적 존재 => 협력적 존재로 바라보는 것 셋째, 객체에게 얼마나 적절한 역할과 책임을 부여하는가 => 궁극적으로 이 3가지 관점으로 프로그래밍 언어라는 틀에 어떻게 담아내는지가 중요하다 2. 기존의 객체지향 묘사 - 객체지향은 현실세계 사물의 추상화로 묘사되는 경우가 많다. - 그러나,..
[자바의 정석] ch11-1 : 컬렉션프레임워크 -- List / Stack-Queue 1. 컬렉션 프레임워크 더보기 : 데이터 군을 저장하는 클래스들을 표준화한 설계 >>컬렉션 프레임웤의 3가지 인터페이스 => Collection : List와 Set의 공통된 부분을 뽑아 정의한 인터페이스 >> Collection 인터페이스의 메서드 >>List 인터페이스 : 순서 존재 + 중복허용 -- 메서드 >>Set인터페이스 : 순서x + 중복 x >>Map 인터페이스 -- 키와 값을 하나의 쌍으로 묶어서 저장 - 키는 중복이 불가/ 값은 중복이 가능 - 순서가 존재x ㅡMap.Entry 인터페이스 : Map 인터페이스의 내부 인터페이스 : key-value 쌍을 다루기 위한 인터페이스 메서드 설명 boolean equals(Object o) 동일한 Entry인지 확인 Object getKey() ..