총 10분 중 11분
2001
시즌 2개, 그리고 영화
시즌 2:
5화
“아일랜드”
출연: 이나영, 김민준, 김민정, 현빈
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
장르: 애초에 역경을 딛고 이룩하는 숭고한 사랑이란 없다. 그 역경 자체가 사랑이다.
프로그램 특징: 그 곳에서 살아남는 사랑이 어떤 모습으로 걸어오는지 기다려 보고 싶다.
회차
-
[JAVA][BOJ 1256] 조합: 사전 찾기0515분문제링크문제 파악N개의 'a', M개의 'z'로 사전을 만들었다. 알파벳 순서로 수록된 사전에서 K번째 문자열 구하기사전에 있는 수가 K보다 작으면 -1 반환N개의 'a', M개의 'z', K번째 문자열1 ≤ N, M ≤ 1001 ≤ K ≤ 1,000,000,000접근 방법각 자리 수까지 만들 수 있는 문자열 개수 중복한 문자를 가지기 때문에 만들 수 있는 문자열의 개수는 N+M개 중 N개 또는 M개를 택하는 것과 같다.순열과 똑같이 전체 중에서 칸막이를 넣는다고 생각하면 된다.그리고 순열의 nCr = n-1 C r-1 + n-1 C r 을 이용하면 DP가 된다. DP부문 문제가 해결된 상황에서 마지막 데이터의 선택 여부에 따른 경우의 수 계산하는 것이다.DP[5][3] = DP[4][2] + DP[..
-
[JAVA][BOJ 1197] MST: 최소 스패닝 트리0515분문제링크문제 파악최소 스패닝 트리: 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리사이클을 포함하면 가중치의 합이 최소가 될 수 없으므로 사이클을 포함하지 않는다.N개의 노드가 있으면 최소 스패닝 트리를 구성하는 엣지의 개수는 항상 N-1개다.정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000), 가중치는 음수일 수도 있으며 절댓값이 1,000,000을 넘지 않는다.최소 스패닝 트리의 가중치는 -2,147,483,648보다 크거나 같고, 2,147,483,647보다 작거나 같은 데이터만 입력으로 주어진다.접근 방법크루스칼 알고리즘: 엣지 리스트 pq(노드1, 노드2, 가중치), 사이클 확인용 UNION-FINDclass Pa..
-
[Node][Express.js] HTTP transaction 미들웨어0515분*Node.js 프로그래밍 입문(고경희)를 읽고 작성한 글입니다. Express.js(노드 기반 백엔드 프레임워크)를 이용했습니다.Response Request따로 status를 설정하지 않으면 200을 기본값으로 사용한다. POST는 자료가 새로 만들어진 상태를 표현하기 위해 status 201을 이용한다. 미들웨어 Middlewarerouterbody-parserreq - res 중간에서 req을 처리하거나 원하는 형태로 res을 수정하는 것을 미들웨어라고 한다. req가 서버에 도착하기 전 작업 parsing: req body에 포함된 값(아이디, 비번 등)을 앱에서 읽을 수 있는 형태로 변환한다.아이디, 비밀번호 값으로 사용자 인증한다 + 폼 내용 검증 라우팅 처리: 특정 URL로 들어온 re..
-
git으로 협업하기 위한 git flow 이해하기0515분나는 지금까지 개인 프로젝트를 깃에 올리지 않았다. 수정할 때마다 새로 커밋하는 것도, 잘못된 명령어 하나로 로컬이 원격과 연동되어버리면 다시 복구하느라 시간 쏟는 과정이 아까웠다. 하지만 이제는 협업을 위해 배워야 한다.개인 브랜치 사용: 로컬 코드를 원격 저장소에 올리는 코드1. git status2. git add .3. git commit -m "설명 추가: 현재 변경 내용 요약"4. git checkout -b 5. git push origin git branchgit push --set-upstream origin // git push 만으로 자동으로 원격과 연결 개인 프로젝트면 커밋 후 푸시했을 때 충돌이 거의 안난다. 로컬 리포과 원격 리포에 차이가 없기 때문이다.협업을 위해 git fl..
-
[Vue] 생명주기0515분Vue.jsVue.js - 프로그래시브 자바스트립트 프레임워크ko.vuejs.org프로젝트가 커질수록 부모, 자식 관계가 많아질텐데 각 컴포넌트의 생명주기를 알아야 완성도 있는 구현이 가능하다. Todo list 페이지를 사용한다고 하면 아래와 같은 흐름으로 로딩되어 화면이 구성된다. index.html -> main.js -> App.vue -> Todolist.vue -> Todolist components - TodolistItem메인 엔트리 포인트: App.vue 로딩PostList 컴포넌트가 로딩됨 ()PostList.vue: 게시글 목록을 불러와 자식 컴포넌트인 PostItem.vue로 전달onMounted가 실행되면서 API 호출로 데이터를 가져옴posts에 데이터가 업데이트되면서 자동으로..
-
TCP/IP 와 UDP0514분*이것이 자바다(3판)을 보고 작성한 글입니다.IP: Internet ProtocolIP 주소는 네트워크 어댑터(LAN 카드)마다 할당된다.DNS(Domain Name System)Web browser 웹 명령어 ipconfig / ifconfig웹브라우저가 DNS를 거쳐 웹서버에서 웹 페이지를 받게 되는 과정?웹 브라우저는 웹 서버와 통신하는 클라이언트로, 사용자가 입력한 도메인 이름으로 DNS에서 IP를 검색해 찾은 다음, 웹 서버와 연결해 웹 페이지를 받는다.Port 번호운영체제가 관리하는 서버 프로그램의 연결 번호포트번호가 필요한 이유는?배경: 하나의 IP 주소를 갖는 컴퓨터에서 다양한 서버 프로그램(FTP서버, DBMS, 웹 서버 등)이 실행될 수 있다. 서버는 시작할 때 특정 포트 번호에 바인..
-
2025.05.09 금융뉴스 읽기0509분https://www.joongang.co.kr/article/25334562 Fed, 3연속 금리 동결…파월 “관세 여파 관망” 22번 말했다 | 중앙일보트럼프 대통령의 금리 인하 압박이 커지고 있지만 Fed는 관세 정책에 따른 경제 불확실성이 크다고 판단했다. 제롬 파월 Fed 의장은 "행정부가 교역국들과 관세 협상에 돌입했다"며 "관세 정책이www.joongang.co.kr 트럼프 대통령의 금리 인하 압박이 커지고 있지만, 제롬 파월은 행정부가 교역국과 관세 협상에 돌입하여 관세 정책, 경제성장고용에 어떤 영향이 미칠지 불확실한 점을 들어 기준금리를 동결했다.추가로 실업과 인플레 상승 위험이 커졌다는 문구가 추가됐다. → 매파적/비둘기파적이 아닌 무역 정책으로 인한 스태그 플레이션 위험을 나타낸 것..
-
비동기데이터 처리를 위한 폼 태그 API 이해0503분폼 태그에서 받아온 정보를 DB에서 수정해보자우선 프론트에서 폼을 다룰 때 name을 지우면 안된다. name이랑 id의 차이가 없는 것 같아서 둘 중 하나를 지우고 싶었다. 서버에서 폼을 인식할 떄는 name 속성을 이용하므로 name을 냄겨두도록 하자. HTML 은 GET, POST만 가능하다.정보 수정 페이지 폼에서 버튼 클릭과 동시에 정보를 서버에 보내려면 PUT, DELETE 요청은 어떻게 사용해야할까?1. AJAX (Asynchronouss Javascript And XML)XMLHttpRequest라는 HTTP 요청을 만들어 요청 방식과 넘겨줄 정보를 지정하는 비동기 통신 방법을 말한다.// xhr 객체를 만들고 open 함수를 이용해 form POST to PUT/DELETEdocumen..
-
이것이 자바다(3판) 9장 익명객체 풀다가 new와 final을 이해하기 위해 JVM 메모리 동작 공부0425분7. 다음 Chatting 클래스는 컴파일 에러가 발생합니다. 원인을 설명해보세요.public class Chatting { class Chat { void start() {} void sendMessage(String message) {} } void startChat(String chatId) { String nickName = null; nickName = chatId; Chat chat = new Chat() { @Override public void start() { while(true) { String inputData = "안..
Algorithm/Dynamic Programming
[JAVA][BOJ 1256] 조합: 사전 찾기
문제 파악
N개의 'a', M개의 'z'로 사전을 만들었다. 알파벳 순서로 수록된 사전에서 K번째 문자열 구하기
- 사전에 있는 수가 K보다 작으면 -1 반환
N개의 'a', M개의 'z', K번째 문자열
- 1 ≤ N, M ≤ 100
- 1 ≤ K ≤ 1,000,000,000
접근 방법
각 자리 수까지 만들 수 있는 문자열 개수 < K, K랑 가장 근접한 개수에서 노가다로 푸는게 생각이 났다.
중복한 문자를 가지기 때문에 만들 수 있는 문자열의 개수는 N+M개 중 N개 또는 M개를 택하는 것과 같다.
순열과 똑같이 전체 중에서 칸막이를 넣는다고 생각하면 된다.
그리고 순열의 nCr = n-1 C r-1 + n-1 C r 을 이용하면 DP가 된다.
DP
부문 문제가 해결된 상황에서 마지막 데이터의 선택 여부에 따른 경우의 수 계산하는 것이다.
DP[5][3] = DP[4][2] + DP[4][3]
- 5개 중 4개를 이미 선택 완료한 데이터라 가정
- 5개 중 3개를 선택 = 4개 중 2개 선택 + 4개 중 3개 선택
DP[n+m][n] = T = 남아있는 문자들로 만들 수 있는 경우의 수
T >= K: 현재 자리 문자를 a로 선택
T < K: 현재 자리 문자를 z로 선택하고, K = K - T 로 업데이트
- K = K - T 로 업데이트 하는 이유는, 만약 DP[][] = 3이고, K(4)번째일 때, a를 놓았을 때 경우의 수가 3개 생긴다는 뜻이므로 a로 놓았을 경우 3개를 K에서 빼주고 z로 놓는다.
코드 구현
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int k = sc.nextInt();
// DP 테이블 초기화
int[][] DP = new int[202][202];
for (int i = 0; i <= 200; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) DP[i][j] = 1;
else {
DP[i][j] = DP[i - 1][j - 1] + DP[i - 1][j];
// k보다 큰 범위는 볼 필요없기 때문에 범위의 최댓값 입력
if (DP[i][j] > 1000000000) DP[i][j] = 1000000001;
}
}
}
// 주어진 K가 만들 수 있는 조합 수보다 크면 불가능
if (DP[n + m][m] < k) {
System.out.println("-1");
return;
}
// 결과를 담을 StringBuilder
StringBuilder sb = new StringBuilder();
// n, m이 0이 될 때까지 반복
while (!(n == 0 && m == 0)) {
if (n > 0 && DP[n - 1 + m][m] >= k) {
sb.append("a");
n--;
} else {
if (n > 0) k -= DP[n - 1 + m][m];
sb.append("z");
m--;
}
}
// 최종 결과 출력
System.out.println(sb.toString());
}
}
배우게 된 점
DP가 부분 문제의 마지막 순간을 선택한다는 걸 순열의 n-1Cr-1 + n-1Cr로 이어서 생각할 수도 있다는 것을 배웠다 .
질문
'Algorithm > Dynamic Programming' 카테고리의 다른 글
[백준 12865][dp] 배낭: knapsack (2) | 2024.06.30 |
---|---|
[프로그래머스][dp] 땅따먹기 (0) | 2024.06.26 |
[백준 1106] DP 동적프로그래밍 (0) | 2024.06.25 |
2025:05:15
Algorithm/Dynamic Programming
[JAVA][BOJ 1256] 조합: 사전 찾기