본문 바로가기

프로그래밍67

14. 인터페이스 인터페이스 : 기능들의 목록"무슨 기능을 만들어야할까?" VS "구현부터하기"어떤 기능을 만들어야 할지부터 고민한다. 만들어야 할 기능들을 관련된 것 끼리 묶은 후 이름을 지어준다.기능적 요구사항 & 비기능적 요구사항기능적 : 필요한 메소드비기능적 : 속도, 언어 -> 만족하기 위해서 아키텍처가 필요하다. 설계는 이름을 정하고, 관계를 정하는 것. 어떤 기능이 필요한지 고민하면 이름이 나오고 클래스가 나온다. 구현은 나중 얘기다. 인터페이스는 기능(메소드)이 선언만 되어있다. 기능들의 목록. 인터페이스 작성 문법"인터페이스이름"은 Upper CamelCase로 작성된다.Interface도 확장자 .java 파일로 작성한다.인터페이스의 모든 필드는 public static final이어야 하며, 모든 메소.. 2023. 9. 14.
13. 접근 제한자 접근제한자 클래스 내부 동일 패키지 하위 클래스 그 외 public O O O O pretected O O O X default O O X X private O X X X 메소드 길이 : 한 화면에 다 보일 만큼 너무 길어지면 메소드가 구조적으로 분리가 되어야 하는 거 아닐까? 하는 고민을 해야 한다. 로직이 나누어져야 하지 않나? 그치만 외부에서 호출이 아니라, 내부적으로 호출하고 싶을 때 -> private 2023. 9. 6.
12. final 클래스, 불변객체 String Final 클래스는 상속받지 못한다 String은 final 클래스 이다. 왜? string 객체를 new로 생성하지 않으면 상수처럼 메모리에 올라가 그것을 참조한다..(변하지 않는다) new로 생성하면 항상 새로운 인스턴스가 메모리에 올라가서 그 것을 참조한다. 레퍼런스 타입에서 ==는 같은 것을 참조하느냐? 를 물어보는 것. 스트링은 레퍼런스타입. 따라서 new로 생성하면 인스턴스가 각각만들어지기 때문에 같은 문자라도 다른 인스턴스를 참조하게 된다. 그냥 "~~"로 생성하면 같은 상수(처럼) 를 참조한다. 따라서 new를 안쓰는 게 메모리를 아끼는 것. 단, equals 메소드를 쓰면 문자만 같으면 같다고 나온다. equals는 값이 같냐는 것을 묻기 때문에. string객체에 어떤 메소드를 써도 객.. 2023. 9. 6.
이것이 코딩테스트다 6일차 - 정렬 문제 성적이 낮은 순서로 학생 출력하기 굳이 dictionary로 안 받아도 되는데 일단 받아봄#name, score #성적 낮은 순(오름차순)으로 '학생 이름' 출력 n= int(input()) student = dict() for i in range(n) : key, value = input().split() student[key]=int(value) print(student) student_sorted = sorted(student.items(),key=lambda x : x[1]) //키값으로 정렬하는 방법. 정렬후에는 list내 튜플 형식으로 반환된다. for key,value in student_sorted : print(key) 처음부터 리스트로 받기 #name, score #성적 낮은 순(오름차.. 2023. 7. 7.
이것이 코딩테스트다 5일차 - 구현 문제 게임 개발 너무 복잡해서 일단 구현부터 했다 # N,M을 공백으로 구분하여 입력받기 n,m = map(int, input().split()) # 방문한 위치를 저장하기 위한 맵을 생성하여 0으로 초기화 d = [[0]*m for _ in range(n)] # 현재 캐릭터의 x좌표, y좌표, 방향을 입력받기 x,y,direction = map(int,input().split()) d[x][y]=1 #현재 좌표 방문 처리 #전체 맵 정보를 입력받기 array = [] for i in range(n) : array.append(list(map(int,input().split()))) # 북, 동, 남, 서 방향 정의 dx = [-1,0,1,0] dy = [0,1,0,-1] #왼쪽으로 회전 def turn_le.. 2023. 7. 6.
chapter10 문자열탐색 10.1 문자열 탐색 알고리즘의 개요Ctrl+F : 탐색단축키본문 : 탐색 대상 문자열패턴 : 탐색어이동 : 탐색 위치 옮기기10.2 고지식한 탐색 알고리즘본문 길이가 n이고 패턴 길이가 k이면 인덱스 0~n-k까지 패턴단위로 한 칸 한 칸 옮겨서 탐색 해보는 것최악의 경우 NxM번의 비교 수행10.3 카프-라빈 알고리즘알고리즘의 핵심 : 해싱 10.3.1 카프-라빈 알고리즘의 동작 방식문자열 탐색을 위해 해시 함수를 이용한다. 패턴의 해시값과 본문 내의 하위 문자열의 해시값을 비교하는 방식연산 비용은 더 커보이는데 천재적인 영감은? 해시함수의 비용을 획기적으로 줄이는 방법 패턴의 길이 m = 4 본문 = S[0…3]인 해시값 H = S[0]x2^3 + S[1]x2^2 + S[2]x2^1 + S[3]x2.. 2023. 6. 9.