래퍼런스와 스태틱(static)
2021. 8. 21. 12:33
JAVA
래퍼런스 래퍼런스란 자바 타입의 큰 범주 즉 카테고리이다. 자바에서 변수의 타입은 크게 두 가지로 나뉜다 래퍼런스형 (reference type) 기본형 (primitives type) 여기서 래퍼런스형이란 클래스 타입, 사용자 정의형 타입이라고도 불린다. 이는 객체를 변수에 연결하기 위해 사용된다. 엄밀히 말하면 객체의 주소 정보를 담고 있다. // 객체 생성 후, 그 객체의 주소를 marine1 변수에 저장. 그 객체를 Marine 타입 으로 해석. Marine marine1 = new Marine("레이너", 80); // marine1 주소의 객체이 접근하여, stimpack() 동작을 실행 marine1.stimpack(); 여기서 래퍼런스 변수와 기본형 변수의 차이를 알 수 있는데 래퍼런스 변..
간단한 클래스 분리
2021. 8. 21. 11:28
JAVA with TDD, Clean Code
이 문제는 마린이 스팀팩을 쓰면 자신의 체력이 10 깎이고, 메딕이 힐을 써주면 마린의 체력이 10 올라가게 하는 프로그램을 구성하는 것이다. 딱 봤을 때는 유치해 보일지는 모르겠지만 이 문제에서 클린 코드를 만들기 위한 메소드 분리 + 클래스를 분리하는 리팩토링 경험 을 간단히 진행할 수 있었다. 클린코드를 위한 가이드 1) 작게 만들어라. 함수를 만드는 첫 번째 규칙은 '작게'다. 함수를 만드는 두 번째 규칙은 '더 작게'다. 2) 한 가지만 해라. 함수는 한 가지를 해야 한다. 그 한 가지를 잘해야 한다. 그 한 가지만 해야 한다. 3) 함수 당 추상화 수준은 하나로 함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장이 동일한 추상화 수준에 있어야 한다. 코드는 위에서 아래로 이야기처럼 일..
Python(파이썬) 알고리즘 자료구조 기초 (스택, 큐)
2021. 8. 19. 14:28
Algorithm
자료구조(Data Structure)란 '데이터를 표현하고 관리하고 처리하기 위한 구조'이다. 오늘은 그중 기초인 스택과 큐에 대해 알아보자. 스택과 큐는 다음의 두 핵심적인 함수로 구성된다. 삽입(push) : 데이터를 삽입한다. 삭제(pop) : 데이터를 삭제한다. 이 외에도 오버플로(특정한 자료구조가 수용할 수 있는 데이터의 크기를 이미 가득 찬 상태에서 삽입 연산을 수행할 때 발생)와 언더플로(특정한 자료구조에 데이터가 전혀 들어 있지 않은 상태에서 삭제 연산을 수행할 때 발생)도 고민해봐야 하는 문제이다. 스택 스택은 쉽게 도넛 쌓기에 비유할 수 있다. 도넛을 아래부터 차곡차곡 쌓는다고 하면 그 도넛을 먹을 때는 가장 위에 있는 도넛을 먹을 것이다. 이러한 구조를 선입 후출(First In La..
백준 알고리즘 파이썬(Python) 1793번 타일링
2021. 8. 17. 11:57
Algorithm
점화식을 생각해보면 dp[ i ]가 가질 수 있는 경우의 수는 dp [ i-1 ] 에서 추가로 2x1의 타일을 세로로 붙인 경우 dp [ i-2 ] 에서 추가로 2x1의 타일을 가로로 2개 붙인 경우 + 2x2의 타일을 하나 붙인 경우 이렇게 점화식을 구성할 수 있다. (여기서 주의할 점은 dp[ i -2 ]에서 2x1 타일을 세로로 2개 붙인 경우는 1번 경우 안에 포함됨으로 점화식에 포함시키지 않는다.) 따라서 최종 점화식은 dp[i] = dp[i - 1] + 2 * dp[i - 2] (여기서 i = 0일때 즉 타일을 아무것도 놓지 않는 경우도 1로 세준다는 것에 주의하자) 이 문제는 테스트 케이스의 개수가 주어지지 않기 때문에 예외처리를 통해 구현해준다. dp = [0 for i in range(2..
백준 알고리즘 파이썬(Python) 10815번 숫자카드
2021. 8. 5. 14:03
Algorithm
주어지는 값이 매우 크기 때문에 if - in 구문을 쓰는 순차 탐색을 이용하면 시간 초과가 난다 따라서 탐색시간을 획기적으로 줄여주는 이분 탐색을 이용해야 한다. 이분 탐색을 활용할 줄 안다면 간단한 문제이다. 아래는 원하는 원소의 위치를 알려주는 이분 탐색의 기본적인 코드이다. (재귀를 사용하는 방법도 있지만 이 코드가 제일 간단하고 이해하기 쉬운 것 같다.) def binary_search(array, target, start, end): while start target: end = mid - 1 else: start = mid + 1 return None 따라서 이 이분 탐색 함수를 이용해 문제를 풀어주면 아래의 답이 나온다. import sys n = int(input()) card = lis..