반응형
[Java] Generics (제네릭) - 공변/무공변/반공변, PECS
공부/Java2023. 7. 21. 17:36[Java] Generics (제네릭) - 공변/무공변/반공변, PECS

요약. 제네릭의 무공변/공변/반공변- 제네릭은 기본적으로 무공변/불공변성을 가진다- 상한 경계(extends) 타입 변수 지정하여 제네릭은 공변성을 가질 수 있다- 하한 경계(super) 타입 변수 지정하여 제네릭은 반공변성을 가질 수 있다 공변은 인터페이스 구현이나 상속(부모-자식 관계)을 생각하고,반공변은 부모-자식관계가 반대로 된 것으로 생각하기 Generics 란?-  클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법-  타입을 클래스 정의하는 시점이 아닌, 실제 사용하는 생성 시점에 결정-  Complie(컴파일) 단계에서 타입을 체크함으로써 코드의 안정성을 높임-  코드 중복 줄이고 재활용성 높임-  JDK 1.5 부터 도입 Generics을 사용하는 이유Generics 타입 지정함..

[Java] Annotation - 어노테이션 (자바의 정석)
공부/Java2023. 7. 19. 21:40[Java] Annotation - 어노테이션 (자바의 정석)

자주 사용하는 표준 어노테이션 @Override - 오버라이딩을 올바르게 했는지 컴파일러가 체크  @Deprecated- 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙임 @FunctionalInterface- 함수형 인터페이스는 하나의 추상메서드만 가져야 한다는 제약이 있음- 함수형 인터페이스에 붙이면, 컴파일러가 제대로 작성했는지 체크- 함수형 인터페이스라고 명시적으로 알려줌 @SuppressWarnings- 컴파일러가 경고 메시지가 나타나지 않게 한다. - 명시적으로 경고를 확인하고 억제하기 위해 붙였다는 의미를 나타내기도 함# 한 가지@SuppressWarnings("unchecked")List list = new ArraysList(); // 제네릭 타입 지정하지 않아 발생하는 오류 표시..

[BOJ 10942] 팰린드롬 ? (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 18. 23:15[BOJ 10942] 팰린드롬 ? (Java, DP)

문제 링크 https://www.acmicpc.net/problem/10942 10942번: 팰린드롬? 총 M개의 줄에 걸쳐 홍준이의 질문에 대한 명우의 답을 입력으로 주어진 순서에 따라서 출력한다. 팰린드롬인 경우에는 1, 아닌 경우에는 0을 출력한다. www.acmicpc.net 문제 풀이 시간복잡도 - 상향식(Bottom-Up) 풀이시 O(N^2) = O(2000^2) - 하향식(Top-Down) 풀이시 O(N!) = O(2000!) 시간 초과 발생 가능 -> memorization 기법으로 시간내 풀이 가능 *팰린드롬 (PALINDROME) ? - 길이가 1일 때 자기 자신도 팰린드롬이다. (1, 2, 3, ...) - 길이가 2인 경우 두 숫자가 동일할때 팰린드롬이다. (11, 22) - 길이가..

[BOJ 11049] 행렬 곱셈 순서 (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 18. 22:50[BOJ 11049] 행렬 곱셈 순서 (Java, DP)

문제 링크 https://www.acmicpc.net/problem/11049 11049번: 행렬 곱셈 순서 첫째 줄에 입력으로 주어진 행렬을 곱하는데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 231-1 보다 작거나 같은 자연수이다. 또한, 최악의 순서로 연산해도 연산 횟수가 231-1보다 작거나 같 www.acmicpc.net 문제 풀이 백준 11066 파일 합치기와 비슷한 문제였으나 행렬 곱셉을 어떻게 DP 배열로 처리할 지에 대해 파악하기 힘든 문제였다. - 상향식(Bottom-Up)으로 풀 경우 시간 복잡도 O(N^2) - 하향식(Top-Down)으로 풀경우 O(N!) , memorization 기법 활용하여 시간 내에 풀이 가능 - 최대치는 Integer 범위 - 행렬 A (m x k) ,..

[Intellij] Custom VM options 잘못 설정하여 실행되지 않는 경우 : Invalid initial heap size
공부/IDE2023. 7. 17. 21:54[Intellij] Custom VM options 잘못 설정하여 실행되지 않는 경우 : Invalid initial heap size

문제 인강을 보며 신규 프로젝트 생성하면서 무심코 Custom VM options을 수정한 뒤로 인텔리제이가 실행 되지 않았다. (-Xms1024m -Xmx2048m) *한시간 동안 괴롭혔던 에러 메시지 $ intellij // 인텔리제이 실행 alias Invalid initial heap size: -Xms1024m Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. 기술블로그를 찾아보거나 ChatGPT에게 질문해보아도 인텔리제이 설치 경로에 있는 idea64.vmoptions의 Xms, Xmx 힙 사이즈 수정해도 실행되지 않았다 설치 경로 /home/사용자명/..

[BOJ 1949] 우수마을 (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 16. 22:05[BOJ 1949] 우수마을 (Java, DP)

문제 링크 https://www.acmicpc.net/problem/1949 1949번: 우수 마을 N개의 마을로 이루어진 나라가 있다. 편의상 마을에는 1부터 N까지 번호가 붙어 있다고 하자. 이 나라는 트리(Tree) 구조로 이루어져 있다. 즉 마을과 마을 사이를 직접 잇는 N-1개의 길이 있으며, www.acmicpc.net 문제 풀이 - 인접 리스트 사용하여 시간 복잡도 O(V + E) = O(10,000 + 9,999) - 트리이기 때문에 간선의 수 = 노드의 수 - 1 - DFS 방식으로 리프 노드 구하는 문제에서 응용하는 문제로 2차원 배열로 방문 여부에 따라 조건 처리를 하게 된다 - 시작 노드는 1로 해서 최종적으로 DP[1][0], DP[1][1] 중 최대값이 최대 인구에 해당한다 DP..

[BOJ 1509] 펠린드롬 분할 (Java, DP, Two pointer)
알고리즘/동적 프로그래밍2023. 7. 16. 21:25[BOJ 1509] 펠린드롬 분할 (Java, DP, Two pointer)

문제 링크 https://www.acmicpc.net/problem/1509 1509번: 팰린드롬 분할 세준이는 어떤 문자열을 팰린드롬으로 분할하려고 한다. 예를 들어, ABACABA를 팰린드롬으로 분할하면, {A, B, A, C, A, B, A}, {A, BACAB, A}, {ABA, C, ABA}, {ABACABA}등이 있다. 분할의 개수의 최솟값을 출력하 www.acmicpc.net 문제 풀이 스스로 풀지 못하여서 기술 블로그를 참고 하였고, 이번 문제를 통해 DP 기법과 Two Poiner 기법 응용하는 방식에 대해 처음으로 알게 되었다. 풀이 후 몇일 있다가 손으로 그려보고 Top-Down, Bottom-Up 풀이하는데 역시나 쉽지 않은 문제인 것 같다. 가짜문제 정의, 초기화 항목 .. 단순히..

Jenkins 빌드 배포시 Slack 알림 설정 (5)
공부/DevOps2023. 7. 16. 14:28Jenkins 빌드 배포시 Slack 알림 설정 (5)

Jenkins v2.413 기준 설명 Slack 설정 Slack 가입 및 개인 채널 생성 (생략) - 무료 플랜 사용 - 배포 알림 채널로 #build-deploy 생성 Jenkins CI 앱 설치 앱에서 jenkins 검색하여 추가 아래 이미지에서는 생략되어 있지만 친절하게 Jenkins에 Slack Token 등록하는 방법 또한 가이드 설명해 준다 사용할 채널을 선택하고 Slack Token을 발급받고 가이드에 따라 Jenkins 설정에 해당 토큰을 등록 후 사용 Jenkins 설정 plugin 설치 - 플러그인 설치 권한 가진 계정으로 접속 - [Jenkins관리 > Plugins] 에서 slack notification 설치 Slack Token 등록 - [jenkins 관리 > System] 메..

[Ubuntu] /bin/bash로 기본 shell 변경하기
공부/DevOps2023. 7. 15. 21:06[Ubuntu] /bin/bash로 기본 shell 변경하기

chsh 명렁어 실행 $ su root $ chsh -s /bin/bash /etc/passwd 수정 $ vim /etc/passwd /bin/sh 를 /bin/bash 로 수정 후 저장하면 된다

[Docker] Jenkins Build, Deploy, Execute Shell / 자동배포 환경 테스트 (4)
공부/DevOps2023. 7. 15. 21:01[Docker] Jenkins Build, Deploy, Execute Shell / 자동배포 환경 테스트 (4)

전체 flow 해당 포스팅에서는 *.war 빌드 배포 후 hello world 화면 확인하는 과정만을 기록 Jenkins Execute Shell 작성 1. Execute Shell #!/bin/bash ./gradlew clean bootWar 2. Execute Shell #!/bin/bash BUILD_FILE=$(find . -name *.war) FILE_NAME=`basename $BUILD_FILE` HOST=ubuntu1 USER=ubuntu LOC=/home/ubuntu/project/wars SYMBOLIC_LINK=/home/ubuntu/project/dev.war RUN_CMD=/home/ubuntu/project/deploy.sh echo "> copy ${BUILD_FILE} t..

[Docker] Container SSH key 접속, scp 명령어로 파일 전송 (3)
공부/DevOps2023. 7. 15. 15:51[Docker] Container SSH key 접속, scp 명령어로 파일 전송 (3)

* 절차 : Docker Network 신규 생성 > hostname 지정 > ssh key 통신 접속 수행 Docker Network 생성 $ docker network create --gateway 172.19.0.1 --subnet 172.19.0.0/16 home # 확인 $ docker network ls $ docker inspect home - home bridge 신규 생성 - docker의 경우 신규 컨테이너 생성시 default 네트워크에 B클래스 대역 IP로 할당하는 것으로 보임 Docker Container 실행 및 SSH Key 접속 - 사전에 만들어 놓은 ubuntu와 jenkins container 를 활용하여 - docker run의 경우 container를 다시 만들고, 실..

[Docker] Container IP 확인 및 SSH 접속하기 (2)
공부/DevOps2023. 7. 14. 22:43[Docker] Container IP 확인 및 SSH 접속하기 (2)

Docker Container 별 IP Address 확인 1. host (local) 에서 docker command로 확인하기 방법1. docker inspect json 형태로 구성된 (low-level) docker container 정보에서 확인 $ docker inspect -f "{{.NetworkSettings.IPAddress}}" $ docker inspect | grep IPAddress 방법2. docker exec 실행 중인 docker container 에 command 실행 시킴 이때 ip 명령어의 경우 서버에 패키지 설치 되어 있지 않을 경우 동작하지 않음 (iproute2 패키지 설치) $ docker exec ifconfig eth0 $ docker exec ip addr..

[Next Step] 3.3 원격 서버에 배포 (p84) 정리
독서/📚2023. 7. 11. 21:38[Next Step] 3.3 원격 서버에 배포 (p84) 정리

요구사항 로컬 개발 환경에 설치한 HTTP 웹 서버를 물리적으로 떨어져 있는 원격 서버에 배포해 정상적으로 동작하는지 테스트한다. 이때 HTTP 웹 서버 배포 작업은 root 계정이 아닌 배포를 담당할 새로운 계정을 만들어 진행한다. ① 계정 추가 및 sudo 권한 할당② 각 계정별 UTF-8 인코딩 설정해 한글 이슈 해결③ JDK, 메이븐 설치④ Git설치, clone 및 빌드⑤ 방화벽 설정(ufw)⑥ 소스 코드 재배포 참고. AWS 사용할 경우 아래 링크 참고 (p83)https://opentutorials.org/module/1946 참고. 영상 자료https://www.youtube.com/watch?v=dWGzApCuF9Mhttps://www.youtube.com/watch?v=N8iLAuAo-..

[BOJ 15681] 트리와 쿼리 (Java, DP, DFS)
알고리즘/동적 프로그래밍2023. 7. 11. 17:00[BOJ 15681] 트리와 쿼리 (Java, DP, DFS)

문제 링크 https://www.acmicpc.net/problem/15681 15681번: 트리와 쿼리 트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105) 이어 N-1줄에 걸쳐, U V의 형태로 트리에 속한 간선의 정보가 주어진다. (1 ≤ U, V ≤ N, U ≠ V) www.acmicpc.net 문제 풀이 - 시간 복잡도 O(V + E) // 인접 리스트 사용 - 백준 링크에 들어가보면 하단에 친절하게 로직을 설명하고 있어 참고하면 됨 # 입력 트리를 그릴 경우 5번 Root 기준 5 4 6 3 7 8 9 1 2 # subtree 결과 subtree [0, 1, 1, 3, 4, 9, 4, 1, 1, 1] 제출 코드 ..

[BOJ 2579] 계단 오르기 (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 11. 12:33[BOJ 2579] 계단 오르기 (Java, DP)

문제 링크 https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제 풀이 - 시간복잡도 O(N) 처음 문제 풀이시 아래 (1)과 같이 점화식을 사용하여 문제 풀이를 수행했다 // i = 1, 2 일때 초기화 수행 DP[i] = DATA[i] + Math.max(DATA[i - 1] + DP[i - 3], DP[i - 2]) 이후에 더 나은 방식이 없는지 고민하던 중 예전에 구입했던 패스트 캠퍼스 강의를 확인했고, 2차원 배열을 사용하여 의미 부여를 통해 풀이하..

[BOJ 15990] 1, 2, 3 더하기 5 (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 10. 22:10[BOJ 15990] 1, 2, 3 더하기 5 (Java, DP)

문제 링크 https://www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 문제 풀이 - 시간 복잡도 : O(N) - 1,2,3 더하기 문제에서 조금 변형된 문제, 상향식, 하향식 연습하기 좋은 문제 - 단, 같은 숫자를 연속적으로 붙일 수 없기 때문에 이전 숫자에서 무엇이 사용되었는지 상태값을 기록할 필요가 있다 (2차원 배열 사용) - 간단하게 2차원 배열로 해서 1 ~ 3 숫자 사용 여부를 표기하고 동일하게 점화식으로 구하면 됨 - 최대치 long DP[N + 1][4] 2차원 배열 생성 ( DP[N][1..

[BOJ 15988] 1, 2, 3 더하기 3 (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 10. 21:28[BOJ 15988] 1, 2, 3 더하기 3 (Java, DP)

문제 링크 https://www.acmicpc.net/problem/15988 15988번: 1, 2, 3 더하기 3 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 문제 풀이 - 시간 복잡도의 경우 둘다 O(N) - 최대치의 경우 long ( 나머지 연산 처리해도 N이 최대이면 범위가 넘는 듯 함) - 피보나치에서 조금 변형된 기본 DP 문제 - 상향식, 하향식 형식 연습하기 좋은 기본 문제 0 1 2 3 4 0 1 1 + 1 2 1 + 1 + 1 2 + 1 3 1 + 1 + 1 + 1 2 + 1 + 1 3 + 1 1 + 1 + 2 2 + 2 1 + 3 점화식 DP[i] = (DP[i - 1] + ..

[BOJ 2688] 줄어들지 않아 (Java, DP)
알고리즘/동적 프로그래밍2023. 7. 10. 21:04[BOJ 2688] 줄어들지 않아 (Java, DP)

문제 링크 https://www.acmicpc.net/problem/2688 2688번: 줄어들지 않아 첫째 줄에 테스트 케이스의 개수 T(1

반응형
image