전체 글
-
자바 8 - 함수형 인터페이스 Consumer<T>Java, Kotlin, Spring 2022. 1. 12. 08:12
함수형 인터페이스들은 java.util.function 패키지에 정의되어 있다. 제공하는 인터페이스의 종류는 공식문서에서 확인하자. 이번 포스팅에서는 Consumer 에 대하여 알아보자. Consumer Consumer 는 함수형 인터페이스이다. 함수형 인터페이스에 대한 설명은 자바의 람다 표현식 - 정의와 사용방법 에서 자세히 다루었다. @FunctionalInterface public interface Consumer Consumer 의 이름을 보면, 무언가 소비하는 역할을 수행할 것이라고 예상할 수 있다. 다른 함수형 인터페이스들이 각자의 역할이 비교적 명확히 정해져있는 것에 비해 Consumer 는 수행할 역할에 대해서 규정하지 않는다. 공식 문서의 정의를 살펴보자. Consumer 는 하나의 입..
-
자바 Iterable, Iterator, Collection, List 분석하기Java, Kotlin, Spring 2022. 1. 12. 08:08
Java 에는 원소를 저장할 수 있는 (혹은 저장할 수 있을 것 같은 이름의) 자료구조가 굉장히 많이 있다. 어렴풋이 아는 것은 이제 그만하기로 하고, (나름) 제대로 파악해보자. List List 는 Interface 이다. public interface List extends Collection { // ... } 그런데, Collection 을 확장하고 있다..! 순서를 잘못 잡은 듯 하다. Collection 부터 살펴보자. Collection Collection 또한 Interface 이다. public interface Collection extends Iterable { // ... } 그런데, Iterable 을 확장하고 있다.. 역시나 순서를 잘못 잡은 듯 하다. Iterable 로 이동..
-
자바 8 - 함수형 인터페이스 Predicate<T>Java, Kotlin, Spring 2022. 1. 12. 08:06
자바의 람다 표현식 - 정의와 사용방법에 이어서 자바의 람다 표현식 - 활용 방법 까지 알아보았다. 자바 8 버전에는 람다와 메소드 참조를 쉽게 사용할 수 있도록 도와주는 함수형 인터페이스들을 제공한다. 함수형 인터페이스들은 java.util.function 패키지에 정의되어 있다. 제공하는 인터페이스의 종류는 공식문서에서 확인하자. 이 포스팅에서 사용한 예제코드는 Github 에서 확인할 수 있다. 1. 사전 준비 우리는 Predicate, Consumer 그리고 Function 를 알아볼 것이다. 각각의 함수형 인터페이스를 사용할 객체로 Vehicle 클래스를 만들어서 사용해보자. public class Vehicle { private Type type; private String vendor; pr..
-
자바의 람다 표현식 2 - 활용 방법Java, Kotlin, Spring 2022. 1. 12. 08:05
이 전 포스팅에서 람다의 정의와 사용방법에 대하여 알아보았다. 이번 포스팅에서는 람다가 적용되어 있지 않은 기존 코드에 람다를 적용하여 변화를 살펴보고, 어떠한 점을 얻게 되었는지 살펴보자. 1. 반복되는 동작을 발견하기 동작 파라미터화는 반복되는 동작을 파라미터로 전달받음으로써 해당 부분에 대한 제어권을 호출 영역으로 넘기는 것이다. public String processFile() throws IOException { try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) { return br.readLine(); } } 위의 예제 코드에서와 같이 파일 처리같은 작업은 대부분 자원을 열고, 처리한 다음, 자원을 닫는 순서로 진..
-
자바의 람다 표현식 1 - 정의와 사용방법Java, Kotlin, Spring 2022. 1. 12. 08:03
C와 Java의 기본 문법을 막 공부하고, 몇 가지 간단한 프로그래밍을 할 수 있었던 시점에 자바스크립트는 두 언어와 달리 함수를 다루는 방식이 매우 자유롭다는 것을 처음 알고나서 매우 신기했던 기억이 있다. 람다 표현식은 이급 객체(second-class)에 머물던 자바의 함수(객체 내 메소드)를 일급 객체(first-class)으로 바꾼 것이다. 좀 더 자세히 알아보도록 하자. 1. 메소드를 값으로 취급 function withFoo(func) { const foo = function () { console.log('foo'); }; return function () { foo(); func(); }; } const bar = withFoo(function () { console.log('bar');..
-
ReactNative 에서 Github Actions 로 CI/CD 구축하기React, React Native 2022. 1. 12. 08:01
Github Actions 프로젝트의 Workflow를 쉽게 구성할 수 있도록 하는 Github의 기능. 목표 테스트 자동화 빌드 자동화 원격 저장소(s3)에 Artifacts 파일 업로드 Slack Notification Github Secrets 원격 레포지토리에 업로드 할 수 없는 소스 코드를 Github Actions에서 사용하기 위함. 안드로이드 빌드 패스워드 (KEY_PASSWORD, UPLOAD_PASSWORD) 안드로이드 릴리즈 키 AWS 정보 Slack Webhook Endpoint 테스트 자동화 jobs: install-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install npm depend..
-
Composite Pattern 알아보기Design Pattern 2022. 1. 12. 07:57
JAVA 객체지향 디자인 패턴 도서를 참고한 내용임. 구조적 형태의 전체와 부분의 유사성 - 컴퍼지트 패턴 Computer(전체)를 구성하는 Keyboard, Body, Monitor(부분)이 유사하다. 문제점 Interface를 활용하여 의존성 역전을 하지 않은 코드는 OCP를 위배할 수 밖에 없다. Interface가 아니라 구체 클래스를 의존하는 클래스는 변경이 필요할 때, 수정을 피할 수 없기 때문이다. 따라서 여기서도 OCP를 위배했다고 책은 지적한다. (우리가 작성하고 있는 코드의 거의 대부분..(99%)은 OCP를 위배한다. ) 해결책 문제점의 핵심은 Computer 클래스가 부품을 구현한 구체적인 클래스를 의존하기 때문이다. 우리는 이 전통적인 의존 방향성을 고쳐야 한다. 이 그림을 다시보..
-
Jest 에서 callback 실행 테스트 해보기Javascript 2022. 1. 12. 07:55
기존에 처리하던 방식 this.setState(state, () => { this.props.requestAPI(); });위의 코드가 있다고 하자. 기존에는 setState 함수를 jest.fn 으로 mock 시켜버리니, callback의 실행을 테스트할 방법이 없다고 생각했다. 그래서 requestAPI의 실행은 검증할 수 없었고, 아래와 같이 expect문을 작성하여 익명의 함수가 전달되었다는 테스트만 작성했다. expect(mockSetState).toBeCalledWith(state, expect.any(Function)); mockImplementaion 사용하기 혹시나 어떤 특별한 방법이 있을까? 하고 궁금하여 jest.fn how to run callback 이라고 구글에 검색했다. 그런데..
-
Spring Security 간단 용어 정리Java, Kotlin, Spring 2022. 1. 12. 07:54
Spring Security Authentication 용어 정리 SecurityContextHolder - 인증된 유저의 세부사항이 저장되는 장소 SecurityContext - SecurityContextHolder에서 얻어지며 현재 인증된 유저의 Authentication을 포함하고 있음 Authentication - 인증받을 유저나 SecurityContext안에 현재 유저에게 credential을 제공하기 위해 AuthenticationManager에 입력될 수 있음 GrantedAuthority - Authentication에서 인증받은 유저에게 부여되는 권한 AuthenticationManager - Spring Security의 Filter가 인증을 수행하는 방법이 정의된 API Provi..
-
React Native 에서 단위 테스트 작성하기React, React Native 2022. 1. 12. 07:53
Prototype class 문법으로 Foo 클래스(함수) 생성하기 class Foo1 { methodA() { console.log('method A'); } } 전통적인 방식으로 Foo 함수 생성하기 var Foo2 = function() {}; Foo2.prototype.methodA = function() { console.log('method A'); }; 사용해보기 var foo1 = new Foo1(); foo1.methodA(); var foo2 = new Foo2(); foo2.methodA(); Foo1.prototype.methodA(); Foo2.prototype.methodA(); 두가지 방식은 같은 결과를 보여준다. React Native에서 View..
-
AWS ElastiCache 간단히 살펴보기Web, Server, Cloud 2022. 1. 12. 07:51
Amazon ElastiCache for Redis 레디스는 데이터베이스, 캐시 그리고 메시지 브로커처럼 사용되는 인-메모리 데이터 자료 저장소이다. Amazon ElastiCache 는 Redis 를 이용한 아마존의 Cache 지원 서비스이다. 특징 빠름 NoSQL Database 시스템임 다양한 언어를 지원함 (JavaScript, Java, Go, C, C++, C#, Python, Objective-C, PHP, ...) 오픈소스이며, 안정성을 갖춤 다양한 자료구조 저장 가능 (String, List, Set, Sorted Set, Hashes, Bitmaps, HyperLogLogs, ...) 어떻게 동작하는가? 데이터베이스가 디스크나 SSD 에 저장되는 것과는 반대로, 모든 레디스의 데이터는 ..
-
백준 알고리즘, 2225 문제Algorithms/ACM_ICPC 2018. 8. 14. 15:53
풀이 0 ~ 20 까지 3 개를 더한다고 생각해보자. 1. 0 + ( 0 ~ 20 까지 2개를 더하는 방법의 수 ) 2. 1 + ( 0 ~ 19 까지 2개를 더하는 방법의 수 ) 3. 2 + ( 0 ~ 18 까지 2개를 더하는 방법의 수 ) ... 위 방법을 고안해냈다. DP 배열을 어떻게 표현할지 고민했다. DP[N][K] = 0 ~ N 까지 K 개를 더하는 방법의 수 이제 for 문으로 값을 만들어나가야 하는데, 위 방식에서 분홍색을 선택할 경우 3 중 for 문이 필요할 것이고 연두색 방법을 선택할 경우 2 중 for 문이면 해결이 된다. 코드 @github 에서 확인하기 /** * @site: https://www.acmicpc.net/problem/2225 * @github: https://gi..
-
백준 알고리즘, 9461 문제Algorithms/ACM_ICPC 2018. 8. 14. 13:35
풀이 가장 큰 변의 길이를 추가한다고 했으므로 P[N - 1 ] 은 반드시 들어간다. 추가로 더해지는 값은 P[9] 부터 규칙이 형성된다. P[9] = P[4] + P[8] P[10] = P[5] + P[9] P[11] = P[6] + P[10] ... 따라서 점화식은 P[N] = P[N - 5] + P[N - 1] 코드 @github 에서 보기 /** * @site: https://www.acmicpc.net/problem/9461 * @github: https://github.com/7772 * @auth: Landon Park * @date: 2018. 08. 14 */#include using namespace std; int main() { long P[101]; int i, T, N; cin ..
-
백준 알고리즘, 1699 문제Algorithms/ACM_ICPC 2018. 8. 9. 19:46
풀이 # 무조건 큰 제곱수를 빼는것이 최소 횟수가 아니다. 67 = 64 + 1 + 1 + 1 --> 4개 67 = 36 + 25 + 4 --> 3개 즉, 67 보다 작은 제곱근들 (1, 4, 9, 16, 25, 36, 49, 64) 에 대하여 1. 67 - 1 로 시작하는 경우2. 67 - 4 로 시작하는 경우3. 67 - 9 로 시작하는 경우...8. 67 - 64 로 시작하는 경우 를 모두 알아보아야 한다. "DP[N] = N 의 최소 제곱수의 합의 개수" 라고 한다면 DP 배열이 1 ~ N 까지 채워져 나가는 반복문 안에서 ---> i1 ~ (i*i) 의 제곱수를 빼나가며 최소값을 찾는 과정이 들어가야 한다. ---> j 점화식은 for (i = 1; i > N; for (i = 1; i
-
백준 알고리즘, 2579 문제Algorithms/ACM_ICPC 2018. 8. 8. 18:25
풀이 3. 마지막 도착 계단은 반드시 밟아야 한다. 이 규칙이 가장 중요하다. ... 15 25 10 20 or ... 25 10 20 이 두가지 중 하나는 무조건 선택이 될 것이다. 즉, 다음과 같이 요약될 수 있다. 1. 마지막 직전을 선택한 경우2. 마지막 -2 번째를 선택한 경우 결과적으로 이 두값의 크기를 비교하여 큰 값에 마지막 숫자를 더해주면 된다. 점화식은 DP[N] = max( DP[N-3] + arr[N - 1] , DP[N - 2] ) + arr[N] 이 된다. 코드 @github 에서 보기 /** * @site: https://www.acmicpc.net/problem/2579 * @github: https://github.com/7772 * @auth: Landon Park * @..
-
백준 알고리즘, 1912 문제Algorithms/ACM_ICPC 2018. 8. 8. 16:20
풀이 연속합 문제는 3중 for 문을 구성해야 풀 수 있다. 기억할 연산값을 저장하는 DP 배열에 10 10 + -4 10 + -4 + 3 ... -4 -4 + 3 -4 + 3 + 1 ... 12 12 + 21 12 + 21 + -1 이렇게 모든 값을 비교해보려면 3중 for 문이 필요했다.. 그러나 1 개의 생각만 하면 하나의 for 문으로 문제를 해결할 수 있다. 값을 더해나가는 sum 값이 음수이면 초기화 시킨다. 이전 까지 아무리 큰 값이 나왔더라도 다음에 나올 값이 음수라면 지금까지 더한 값은 최대값이 될 수 없기 때문이다. 해답을 보고나니 너무나 당연한 이론인데 왜 생각해내지 못했을까 싶었다. 코드 @github 에서 보기 /** * @site: https://www.acmicpc.net/pr..
-
백준 알고리즘, 11054 문제Algorithms/ACM_ICPC 2018. 8. 3. 21:19
풀이 증가하는 부분수열 문제를 2 번 이용해서 해결할 수 있다. 첫번째는 왼쪽에서 오른쪽으로 진행하면서 증가하는 부분수열을 찾는다. 두번째는 오른쪽에서 왼쪽으로 진행하면서 증가하는 부분수열을 찾는다. 위와 같이 계산이 되는 것을 볼 수 있다. 여기서 최대값 8 이 정답이라고 생각할 수 있다. 그러나 잘 생각해보면 최대값 8 은 1 2 3 4 5 의 증가 부분과 5 2 1 의 감소부분의 합으로 이루어져있다. 여기서 5 가 중복되기 때문에 최대값에서 - 1 을 해주어야 올바른 값이 나온다. 코드 @github 에서 보기 /** * @site: https://www.acmicpc.net/problem/11054 * @github: https://github.com/7772 * @auth: Landon Park..
-
백준 알고리즘, 11722 문제Algorithms/ACM_ICPC 2018. 8. 3. 15:57
풀이 앞선 11053, 11055 문제 들과 똑같은 문제이다. 다만, 코드를 그대로 가져오기 보다는 복습을 한다는 생각으로 알고리즘을 처음부터 다시 생각해보며 풀어보길 바란다. 부등호 방향만 바꿔주면 된다는 것을 알 수 있다. 코드 @github 에서 보기 /** * @site: https://www.acmicpc.net/problem/11722 * @github: https://github.com/7772 * @auth: Landon Park * @date: 2018. 08. 03 */#include using namespace std; int main() { int DP[1001]; int arr[1001] = { 0, }; int T; int i, j; int max = 1; cin >> T; fo..
-
백준 알고리즘, 11053, 11055 문제Algorithms/ACM_ICPC 2018. 8. 2. 18:34
풀이 DP 문제를 풀어가면서 가장 중요하다고 느낀 점은 "DP 배열을 어떻게 표현할 것인가" 이다. 지금까지의 DP 문제들은 "DP[x] = 문제에서 요구하는 x 의 결과값" 이었다. 즉 최종적으로 구하고 싶은 값이 x 이어도 DP 배열은 DP[x - y] 에 대하여 해당 x - y 에서의 문제가 요구하는 결과값을 담고 있도록 구성하였다. 그러나 이 문제들은 다르다. DP 배열은 각각 대응되는 결과값으로 초기화 시킨다. 즉, 가장 긴 부분수열 문제의 경우에 10 20 10 30 20 50 의 입력값에 대하여 DP 배열은 idx 1 ~ 7 까지 모두 1 로 초기화 되고 만약 조건을 통과하지 못하면 최종적으로 그대로 1 로 남는다. 이건 아주 큰 차이인데, 좀더 자세히 다음을 보면서 설명해보겠다. 10 20..
-
백준 알고리즘, 2156 문제Algorithms/ACM_ICPC 2018. 8. 2. 11:22
풀이 2번 규칙을 보자. 연속으로 놓여있는 3잔을 모두 마실 수는 없다. 이 말은 다음과 같은 것은 가능하다는 것이다. 1. 안마신다. 2. 1 번 연속 마신다. 3. 2 번 연속 마신다. 그리고 DP 배열은 다음과 같이 구성한다. DP[포도잔의 수] = 정답 그렇다면 이 예제의 경우에서 6 10 만이 입력된다면 DP[2] = 16 이다. 만약 6 , 10 , 13 만이 입력된다면 DP[3] = 23 이다. 여기에서 알 수 있는 것은 포도주 3 잔의 최대값을 알려면 3개의 값을 비교해야 한다는 것이다. DP[3] = max ( 6 + 10 , 10 + 13 , 6 + 13 ) = 23 이 식은 또 이렇게 바꿀 수 있다. DP[3] = max ( DP[2] , arr[2] + arr[3] , DP[1] +..
-
백준 알고리즘, 9465 문제Algorithms/ACM_ICPC 2018. 7. 24. 11:01
풀이 한 스티커를 사용한 후 좌/우/상/하 에 위치한 스티커를 사용할 수 없다면 이동할 수 있는 위치는 대각선 뿐이다. 이러한 특징을 이용하여 문제를 풀어야한다. 규칙 1. 스티커 위치의 이동은 대각선으로 한다. 그 다음은 한번에 몇칸까지 이동할 수 있는가를 고려해봐야 한다. 이렇게 한번에 1칸, 2칸, 3칸 ... 등을 움직였을때 2 X N 의 최대 가중치가 어떻게 달라지는지 파악하는 것이 중요하다. 위 그림은 70 까지 가는 2가지 방법을 나타내었다. 파란색 : 50 에서 바로 70 으로 이동, 50 + 70 = 120 빨간색 : 30 과 10 을 거쳐서 70 으로 이동, 30 + 10 + 70 = 100 빨간색은 2 번 이동했음에도 불구하고 1 번 이동한 파란색 보다 값이 작다. 항상 이런 결과가 ..
-
백준 알고리즘, 2193 문제Algorithms/ACM_ICPC 2018. 7. 23. 15:11
풀이 표를 그려보면 쉽게 풀 수 있다. 그러나 표의 행과 열을 어떤 수로 구성해야 할지는 약간의 고민이 필요하다. (이전 문제와는 다르다.) 문제를 보면 무조건 1 부터 시작해야하며 1 이 나오면 반드시 다음에는 0이 와야하고 0 이 나오면 다음에는 0, 1 이 모두 올 수 있다는 것을 알 수 있다. 규칙은 매우 간단하다. 여기서 바로 점화식으로 옮길 수 있다면 좋을테지만 그런 능력이 아직은 안되기 때문에 표를 그려보았다. 각각의 열은 마지막 자리가 0, 1 인 이친수의 개수를 나타낸다. 예를 들어서 살펴보면 4 자리 수의 경우 1 0 0 0 1 0 0 1 1 0 1 0 이렇게 3 개의 이친수가 존재하므로 끝자리(2^0 의 자리) 가 0 인 것은 2 개, 1 인 것은 1 개가 존재한다. 이렇게 표현해놓고..
-
백준 알고리즘, 11057 문제Algorithms/ACM_ICPC 2018. 7. 23. 13:42
풀이 오르막 수 문제는 이전 계단 문제와 마찬가지로 2차원 배열을 활용해서 풀어낼 수 있다. 문제를 읽어보면 각 자리수에 어떤 수 j 가 온다면 그 수의 다음에 올 수 있는 수는 j ~ 9 까지가 된다는 것을 알 수 있다. 점화식은 다음과 같다. DP[N][j] = sum ( DP[N - 1][j ...9] ); 즉, 어떤 값 N 의 특정 자리수 j 의 값은 N - 1 의 자리수의 j 값 부터 9 까지의 모든 해를 더한 것과 같다. ps.. 위 표를 보면 위 값을 전부 더하는 방식(알고리즘에 따른 방식)은 3 중 for 문을 구성해야한다. 그러나 자리값의 해가 DP[N][J] = DP[N][j - 1] - DP[N - 1][j - 1] 로도 구해진다. 따라서 2 중 for 문으로도 표현할 수 있다. 코드..
-
백준 알고리즘, 10844 문제Algorithms/ACM_ICPC 2018. 7. 23. 01:45
풀이 2 자리수 부터 생각해보면 다음과 같다. 1 --> 0, 22 --> 1, 33 --> 2, 4...9 --> 8 3 자리수는 다음과 같다. 0 --> 11 --> 0, 1...8 --> 7, 99 --> 8 이렇게 살펴보면, 3 자리수 부터 다음의 규칙이 적용된다는 것을 알 수 있다. 1. 0 이 나오면 다음 수는 1 이 와야한다.2. 9 가 나오면 다음 수는 8 이 와야한다.3. 1 ~ 8 의 다음 수는 각각 2개가 있다. 이 규칙을 그림으로 그려보면, 점화식을 생각해 낼 수 있을 것 이다. 위 표에서 열은 해당 자리수의 마지막 수를 나타낸다. 그리고 값의 자리는 해당 자리수의 각각의 마지막 수가 나오는 경우의 수다. 그렇다면 이제 위 표를 DP 배열로 나타내고 입력받은 N 자리수에 대한 해당 ..
-
백준 알고리즘, 9095 문제Algorithms/ACM_ICPC 2018. 7. 19. 17:42
개요 이 문제는 이전 타일링 문제들과 아주 유사한 방식으로 풀어낼 수 있다. 이전 두 문제의 연습결과 쉽게 풀어낼 수 있었다. 마찬가지로 유념해야할 점은 규칙을 찾아내야 한다는 것이다. 풀이 어떤 수 N 을 1, 2, 3 으로 더하는 총 개수를 구해야 한다. 이전 문제들과 유사하게 이미 구한 값을 사용한다는 개념을 보면 규칙이 보인다. 4 의 경우 1 + 1 + 1 + 1 1 + 1 + 2 1 + 2 + 1 1 + 3 2 + 1 + 1 2 + 2 3 + 1 로 총 7가지의 경우의 수가 존재하는데 이것은 다음과 같이 바꿔서 볼 수 있다. 1 + (N - 1 을 1, 2, 3 으로 나타내는 경우의 수) 2 + (N -2 를 1, 2, 3 으로 나타내는 경우의 수) 3 + (N - 3 을 1, 2, 3 으로 ..
-
백준 알고리즘, 11727 문제Algorithms/ACM_ICPC 2018. 7. 19. 16:02
개요 이 문제는 11726 문제 (2xn 타일링) 의 다른 버전이다. 11726 문제를 정확히 이해했다면 같은 방식으로 풀어낼 수 있다. 풀이 2 x n 타일링 문제에서는 2 x n 타일을 채우기 위해 1 x 2, 2 x 1 타일을 사용했다. 그러나 이 문제에서는 2 x 2 타일이 추가되었다. 무엇이 달라질까? (1) 2 x 1 (2) 2 x 2 2 x 1 과 2 x 2 를 위와같이 준비해놓았을 때 2 x 3 은 다음과 같이 그릴 수 있다. (3) 2 x 3 2 x 2 번 그림을 그대로 가져온 후, 오른쪽에 2 x 1 크기의 타일을 세로로 하나 넣는다. ---> 개수 변화 없음. 2 x 1 번 그림을 그대로 가져온 후, 오른쪽에 2 x 1 번 크기의 타일을 가로로 2개 넣는다. ---> 개수가 x 2 가..
-
백준 알고리즘, 11726 문제Algorithms/ACM_ICPC 2018. 7. 18. 14:26
개요 이 문제는 Dynamic Programming 분류에 속하는 문제이다. 앞으로 문제를 풀며 기억해야 할 점은 문제에서 언급되는 알고리즘 이외에 언어들.. 예를 들면 타일링, 직사각형, CCTV ... 등의 단어에 집착하지 말아야한다는 점이다. 가장 중요한 것은 규칙을 찾고 그 규칙에 따른 식을 만드는 것이다. 풀이 입력받는 n 에 따라 2 x n 의 타일이 생성된다. 그 생성된 타일에 2 x 1 모양, 혹은 1 x 2 모양의 직사각형을 채워나가는 방법의 수를 구하는 문제이다. 직접 그려보기로 하는데 주의해야할 점이 있다. 2 x 4 만 되더라도 그려나가는 규칙이 제대로 성립되어 있지 않으면 빼먹기 쉽고 매우 헷갈린다. 먼저 규칙을 정해야 한다. (1) 2 x 1 (2) 2 x 2 (3) 2 x 3 ..
-
백준 알고리즘, 1463 문제Algorithms/ACM_ICPC 2018. 7. 17. 16:33
개요 이 문제는 Dynamic Programming 의 첫번째 문제다. Dynamic Programming 은 반복되는 연산을 매번 하지않고 배열이나 힙 등의 저장 공간에 저장해두었다가 필요할때 사용하는 알고리즘이다. 이러한 특징 때문에 이광근 교수님이 지은 "컴퓨터 공학이 여는 세계" 에는 Dynamic Programming 이 "기억하며 풀기" 라고 설명되어 있다. 학교 수업에서도 Dynamic Programming 은 Dynamic 과 거리가 멀다고 배웠는데, 적절한 번역이라고 생각한다. 동적 계획법 이라고 하면 전혀 감이 오지않지만, "기억하며 풀기" 라고 한다면 한번에 이해가 되는 기분이다. 시행착오 다음을 기억하려 했다. 1. X 를 3 으로 나누는 연산2. X 를 2 로 나누는 연산3. X ..
-
백준 알고리즘, 입출력 관련문제Algorithms/ACM_ICPC 2018. 7. 17. 12:11
개요 백준 알고리즘 사이트에는 여러 입출력 문제가 있다. Problem Solving 을 시작하기 전에, 입출력에 관한 아주 조금의 불편함도 없어야 한다는 생각에 여러 입출력 문제를 모두 풀어내려고 한다. 이 글은 그 과정 중에서 주목할만한 부분만을 언급한다. 문제 리스트 2557, 1000, 2558, 10950, 10951, 10952, 10953, 11021, 11022, 11718, 11719, 11720, 11721, 2741, 2742, 2739, 1924, 8393, 10818, 2438, 2439, 2440, 2441, 2442, 2445, 2522, 2446, 10991, 10992 - 출처: http://plzrun.tistory.com/56 [plzrun's algorithm] 주목할..
-
백준 알고리즘, 1924 문제Algorithms/ACM_ICPC 2018. 7. 16. 14:44
개요 이 문제는 흔히 볼 수 있는 DATE 관련 문제이다. 입력되는 month, date 를 미리 정해논 기준으로 count 를 해줌으로서 해결할 수 있다. 풀이 먼저 상수 전역 변수로 DATE 와 요일을 나타내는 char 포인터 배열 를 정의 해놓는다. 그다음 1 월 1 일 부터 입력되는 요일까지를 count 해준다는 의미로 처음부터 count 변수를 생각했었기 때문에 count_date 변수에 누적되는 요일값을 더해줌으로써 해결했다. /** * @site: https://www.acmicpc.net/problem/1924 * @github: https://github.com/7772 * @auth: Landon Park * @date: 2018. 07. 16 */ #include using names..