분류 전체보기
-
[Java] Java 컴파일 & 실행 과정Programming/Java 2020. 9. 16. 02:23
Helloworld.java Compile time 1. 개발자가 Helloworld.java 소스 파일을 작성한다. 2. JVM에서 동작가능한 Byte 코드로 변환하기 위해 Java compiler가 Java 코드를 Byte 코드로 컴파일한다. 3. Helloworld.java -> Helloworld.class로 컴파일 Run time 1. JVM의 Class loader가 Helloworld.cass 클래스 파일을 JVM상으로 가져온다. 2. Byte verifier에 의해 바이트 코드 내부 오류나 버그가 있는지 검증 과정을 거친다. 3. Interpreter는 검증까지 끝난 Helloworld.class를 실행되는 HW의 OS에 맞게 한 줄씩 실행한다. Compiler vs Interpreter ..
-
[Java] Compile time vs Run timeProgramming/Java 2020. 9. 15. 20:48
Compile time 프로그램을 개발하기 위해 개발자가 첫 번째로 해야하는 일은 먼저 소스코드를 작성하는 일이다. 작성된 소스코드는 컴파일이라는 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어코드로 변환되어야 실행 가능한 프로그램이 되는데, 이러한 편집 과정을 컴파일 타임(Compile time)이라고 부른다. Run time 컴파일 과정을 마친 프로그램은 사용자에 의해 실행되며, 응용 프로그램이 동작되어지는 떄는 런타임이라 부른다. Compile time error vs Run time error 컴파일 에러는 프로그램이 성공적으로 컴파일되는 것을 방해하는 구문 에러나 파일 참조 오류와 같은 에러를 말하며 보통 컴파일 하기 전 IDE에서 문제를 일으킬 수 있는 소스 코드를 빨간줄로 알려준다. 이미 실행 ..
-
[Git] .gitignore 작성하기Study/Git 2020. 9. 14. 19:19
.gitignore 버전 관리를 위한 소스코드를 github와 같은 공개된 원격 저장소에 올리는 경우에 보호해야하는 정보나 프로젝트 실행시 자동으로 생성되어 굳이 올리지 않아도 되는 파일을 커밋 대상에서 제외 하기 위해 작성하는 파일이다. 사용 방법 프로젝트의 루트 디렉토리에서 .gitignore 파일을 생성한 뒤 원격 저장소에 올리고 싶지 않은 파일이나 디렉터리를 추가한다. .gitignore .idea .gradle 이그노어 처리된 것을 푸쉬하면 성공적으로 github에 반영된다. 이미 원격 저장소에 올라간 파일을 이그노어 하고싶다면? 기존 원격 저장소에 올라간 파일을 이그노어하기 위해서는 git 에서 cached를 지워야 한다. # 파일인 경우 프로젝트 위치>git rm --cached [파일 명]..
-
[Java] 객체타입 SetProgramming/Java 2020. 9. 10. 01:06
객체 타입 Set 객체 타입을 Set에 추가할 경우 같은 속성값을 가지고 있는 객체이더라도 다른 객체로 인식한다. 그 이유는 객체를 비교하여 Set에 추가할 때 객체의 속성으로 비교하는 것이 아니라 객체의 주소값을 기준으로 비교하기 때문에 다음 객체들은 각각 다른 객체로 인식되어 Set에 중복으로 저장되는 것이다. 예제 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import java.util.HashSet; import java.util.Set; public class Main { static class Person { private String name; private int age; public ..
-
[BOJ] 다리 만들기 2Algorithm/BOJ 2020. 9. 8. 19:46
[17472] 다리 만들기 2 www.acmicpc.net/problem/17472 Solution 다리 만들기 2 문제는 기존의 다리 만들기 문제와 세 가지 다른점이 있다. 다리의 모양에 제한이 있는 것과 한 개의 다리가 아닌 모든 섬을 연결하는 다리를 만드는 것 그리고 다리의 길이는 최소 2 이상이어야 한다는 것이다. 모든 섬을 연결하는 최소 비용의 다리를 만든다는 점에서 Spanning Tree idea를 떠올려야 한다. 먼저 각각의 섬을 구분하기 위한 numbering 작업을 수행한다. MST(최소 신장 트리)를 구하기 위해 크루스칼 알고리즘을 사용했다. map의 모든 cell에 대해 DFS로 섬과 섬을 연결하는 비용(거리)을 구해 우선순위 큐에 넣는다. 이때 주의할 점은 다리는 'ㅡ' 혹은 'l..
-
[BOJ] 다리 만들기Algorithm/BOJ 2020. 9. 7. 18:33
[2146] 다리 만들기 https://www.acmicpc.net/problem/2146 Solution 먼저 각 섬을 구분하기 위한 Numbering 작업을 하고 map[][]의 모든 cell에 대해 바다가 아니면 BFS 탐색을 한다. BFS 탐색을 통해 섬의 끝부분에서 다른 섬까지의 최소값을 answer에 저장한다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74..
-
[BOJ] 게리맨더링Algorithm/BOJ 2020. 9. 6. 19:48
[17471] 게리맨더링 https://www.acmicpc.net/problem/17471 Solution permutation 함수로 N개 구역을 두 선거구로 나눈다음 나뉘어진 선거구에 대해 인접한 선거구인지 체크하는 isConnected 함수를 호출한다. 각 선거구에 대해 dfs로 탐색했을 때 모든 지역을 방문했다면 인접한 선거구이다. answer에 인구 차이의 최솟값을 저장한다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 6..
-
[BOJ] 파이프 옮기기 1Algorithm/BOJ 2020. 9. 6. 16:12
[17070] 파이프 옮기기 1 https://www.acmicpc.net/problem/17070 Solution (0,1) 위치에서 부터 이동할 수 있는 모든 경우를 dfs로 탐색 대각선 파이프로 이동하는 경우에 빈칸이어야 하는 조건을 미리 고려해야한다. 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86..