전체 글

Hello World
· 백준
코드#include #include #include using namespace std;int n,m,inj[32004],x,y;vector adj[32004];vector v;// 키는 순환이 생길 수 없음// 순서가 있게 진행 -> 위상정렬int main() { cin >> n >> m; for(int i = 0; i > x >> y; adj[x].push_back(y); inj[y]++; } queue q; for(int i = 1; i 풀이키 순서 세우기 문제는 학생 간의 순서 관계를 기반으로, 정확한 순서대로 정렬하는 문제이다. 학생 간의 비교 관계는 다일 경로를 형성하므로, 각 학생의 선행 학생이 하나 뿐이다. 이는 선행 작업이 여러 개 있지..
· 백준
코드#include #include #include using namespace std;// 단방향const int INF = 987654321;int n,m,x,s,e,t,visited[1003],res;vector> adj[1003];int dijkstra(int start, int end) { fill(visited, visited + 1003, INF); priority_queue, vector>, greater>> q; q.push({0, start}); visited[start] = 0; while(!q.empty()) { int dist = q.top().first; int here = q.top().second; q.pop(); if(here == end) return visited..
· JAVA
사용자정의 자료형의 이해객체(Object) = 이질적인 구조 = 모델 = 덩어리(Value Object) = 바구니 = 이동(Data Transfer Object)클래스클래스: 객체를 모델링하는 도구새로운 자료형을 만드는 도구객체지향 측면: 현실 세계에 있는 객체를 객체지향 프로그램에서 사용하기 위해 객체의 상태정보(멤버 변수) 행위 정보(멤버 메서드)를 뽑아서 설계하는 도구패키지기능이 서로 비슷한 클래스끼리 모아서 관리를 쉽게 하기 위해 사용.폴더와 비슷패키지 외부에서 클래스의 접근을 할 수 없도록 하기위해 사용자바에서 제공해주는 API도 패키지의 형태로 배포된다.java.lang: 자바에서 자주사용하는 클래스java.io: 입출력 관련 클래스java.net: 네트워킹 관련 클래스java.util: 도..
· JAVA
자바프로그램이 어떻게 실행되는가JVM이란 무엇인가 (JVM을 할면 자바의 특징을 알 수 있다.)Java의 첫 번째 큰 특징은 플랫폼 독립적인 개발이 가능하다는 것두 번째 특징으로는 자동으로 메모리를 관리해준다는 것(Garbage Collector)bytecode: 어떤 OS에서 실행될지 모르기 때문에 확실하게 exe 파일을 만들지는 않고 bytecode(.class) 로 만들어둠. 이를 OS에 맞게 컴파일하여 메모리에 로딩하여 실행javac.exe(컴파일), java.exe(실행, JVM에서 실행)JAVA에서 char는 2byte라서, 한글을 표현할 수 있다.변수가 만들어지면 변수를 관리하는 테이블에 저장이 되는데, 이 테이블은 Symbol Table이다2진수 3개씩 자르면 8진수, 4개씩 자르면 16진..
· 백준
코드#include #include #include using namespace std;struct info{ int wt, wm, bt, bm;};const int INF = 987654321;int n, k,a,b,c,d,dp[103][100003];vector v;int go(int idx, int ti) { // 시간이 오버되면 -INF 반환 if(ti > k) return -INF; if(idx == n) return 0; int &ret = dp[idx][ti]; if(ret != -1) return ret; int walk = go(idx + 1, ti + v[idx].wt) + v[idx].wm; int bike = go(idx + 1, ti + v[idx].bt) + v[i..
· 백준
코드#include #include using namespace std;int n, a[2003],m,x,y,dp[2003][2003];int go(int x, int y) { if(x >= y) return 1; // x가 y보다 커지면 true int &ret = dp[x][y]; if(ret != -1) return ret; if(a[x] == a[y]) { // 같으면 계속해서 확인 ret = go(x + 1, y - 1); } else { // 다르면 0 반환 ret = 0; } return ret;}int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n..
· 백준
코드#include #include #include #include using namespace std;int prime[21];double a,b, dp[20][20][20];// 소수 찾기void primenum() { prime[0] = 0; prime[1] = 0; for(int i = 2; i*i -0.5) return ret; // double형은 == 이 어려움. 따라서 부등호 사용 ret = 0.0; // 경우의 수 찾기 ret += go(x + 1, y, idx + 1) * a * (1 - b); // x만 넣는 경우 ret += go(x + 1, y + 1, idx + 1) * a * b; // x,y 둘 다 넣는 경우 ret += go(x, y + 1, idx + 1) ..
· 백준
코드#include #include #include using namespace std;int n,m,indegree[1003],x,y, visited[1003];vector adj[1003];int main() { cin >> n >> m; for(int i = 0; i > x >> y; adj[x].push_back(y); indegree[y]++; } queue q; for(int i = 1; i 풀이선수과목 문제는 전형적인 위상정렬 문제이다. 몇 번째에 듣는지가 중요했는데, visited 배열을 이용해서 방문 순서를 체크해주면 된다.왜 저번엔 이게 그렇게 기억이 안났지... 오늘은 그냥 한 번에 생각났는데. 알기 힘들다 진짜.
· 백준
코드#include #include using namespace std;int n, a[1003], dp[1003][1003];int go(int idx, int num) { if (idx == n) return 0; // 끝까지 가면 함수 종료 int &ret = dp[idx][num]; if (ret != -1) return ret; // 메모이제이션 ret = go(idx + 1, num); // 부분수열에 포함 X case if (num > n; memset(dp, -1, sizeof(dp)); for (int i = 0; i > a[i]; cout 풀이가장 큰 증가하는 부분 수열을 찾는 문제이다. ret 변수에 포함하지 않는 값을 저장해두고 만약 a[idx]가 이전 값보다 더 큰 값이면 포함하..
· 백준
코드#include #include #include using namespace std;const int mdx[] = {1, -1, 0, 0};const int mdy[] = {0, 0, 1, -1};const int hdx[] = {2, 1, -1, -2, -2, -1, 1, 2};const int hdy[] = {1, 2, 2, 1, -1, -2, -2, -1};const int INF = 987654321;int k, w, h, a[203][203], visited[203][203][32];struct Node { int x, y, dist, horseMoves;};int bfs() { queue q; q.push({0, 0, 0, k}); visited[0][0][k] = ..