전체 글 107

[도서/자바의 신] #3 자바를 제대로 알려면 객체가 무엇인지를 알아야 해요

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 자바의 객체지향 언어라고 해요 이 세상의 모든 사물들은 각각의 객체로 나눌 수 있고, "상태"와 "행위"를 갖는다. 이러한 객체들을 클래스로 나타낸다. 생성자 (constructor) : 클래스 이름과 같은 이름을 갖는 메소드로 new라는 키워드 뒤에 생성자 메소드를 사용해 객체를 생성해줌 기본 생성자 (default constructor) : 매개 변수가 없는 생성자로 클래스를 컴파일할 때 javac를 실행하면 클래스 파일 안에 자동으로 만들어짐 클래스와 객체는 구분하셔야 해요 클래스는 객체를 만들어내는 '틀'같은 거라고 생각하면 되고, 객체는 각각의 실제 사물을 위한 것으로 "인스턴스 (instance)"라고도 한다. 자동차..

[도서/자바의 신] #2 Hello God Of Java

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. 사용한 노트북은 MacOs M1이다. HelloGodOfJava 자바의 경우 코드 작성 -> 컴파일 -> 실행 순서로 프로그래밍된다. 1. 터미널 창에서 HelloGodOfJava.java 파일을 만들고 안에 코드를 입력한 후 저장(코드작성) 2. javac HelloGodOfJava.java 명령어 실행 (컴파일) 3. java HelloGodOfJava 명령어 실행 (실행) 각종 에러 Exception in thread "main" java.lang.NoSuchMethodError: main // 메인 함수가 없을 때 java.lang.NoClassDefFoundError // 일치하는 클래스가 존재하지 않을 때 자바의 컴파..

[도서/자바의 신] #1 프로그래밍이란 무엇인가?

✔️이 글은 [자바의 신 - 이상민 지음] 도서를 바탕으로 정리한 글입니다. Programming의 P 프로그래밍 : 컴퓨터에게 할 일을 가르치는 것 프로그래밍 언어 : 컴퓨터와 사람 사이에 의사소통을 위한 언어 (ex. Java) 자바 프로그램의 메소드는 이렇게 생겼어요 메소드(method) : 어떤 값을 주고 결과를 넘겨주는 것 매개 변수(parameter) : 메소드에 전달되는 값으로 개수는 상관 없음 리턴 타입(return type) : 리턴되는 값의 자료형 메소드를 선언할 때는 접근제어자-리턴타입-메소드이름-매개변수 순서를 반드시 지켜야 한다. 자바의 가장 작은 단위는 클래스랍니다 메소드는 반드시 클래스(class)라는 것에 포함되어 있어야 한다. 아래와 같이 클래스는 접근제어자-class키워드..

[백준/C++] 12015번 가장 긴 증가하는 부분 수열 2

🤔문제 이해 LCS(longest common sequence)문제로 11053번과 유사하지만 n과 Ai의 크기가 훨씬 큰 버전의 문제이다. 🔥풀이🔥 lower_bound를 이용하면 되는 문제이다. 수열이 저장되어 있는 arr과 가장 긴 부분 수열을 찾아 넣어줄 벡터 v를 선언해주었다 가장 먼저 v에 arr[0] 원소를 넣어주고 arr의 1번째 원소부터 마지막까지 for문을 돌려주었다. for문에서는 v의 가장 마지막 원소보다 arr[i]번째 원소가 더 큰 경우엔 v.push_back(arr[i])를 해주었다. 그렇지 않은 경우는 v에서 arr[i]보다 크거나 같은 원소 중에서 index가 가장 작은 원소의 iterator를 탐색하고 그 위치에 arr[i]를 넣어주었다. 이 부분이 조금 이해가 안되었는데..

백준/C++ 2022.11.17

[백준/C++] 6087번 레이저 통신

🤔문제 이해 하나의 C에서 다른 C까지 가는 경로 중 방향을 가장 적게 바꾸면서 가는 방법을 찾아 방향을 바꾼 횟수를 출력하는 문제이다. 🔥풀이🔥 첫번째 C에서 갈 수 있는 경로를 먼저 탐색하여 각 방향별로 cnt를 0으로 queue에 넣어준다. 그 뒤에는 queue가 빌때까지 각 방향대로 돌면서 이전과 같은 방향인 경우 cnt는 그대로 두고, 다른 방향인 경우 cnt에 +1을 해주었다. 그렇게 처리한 cnt값이 dp의 값보다 작거나 같으면 dp를 업데이트해주고 queue에도 넣어주었다. queue에서 pop될 때 dp의 값이 cnt보다 작으면 continue을 해주어서 불필요한 연산을 줄여주었고, dp값이 cnt보다 큰 경우는 cnt로 업데이트 해주었다. ✍️ 후기 처음엔 단순히 BFS를 해서 방향이 ..

백준/C++ 2022.11.15

[백준/C++] 15927번 회문은 회문아니야!!

🤔문제 이해 팰린드롬이 아닌 가장 긴 부분문자열을 구하는 문제이다. 🔥풀이🔥 구글링을 통한 문제 풀이이다. 주어진 문자열 전체가 회문이거나 회문이 아닌 경우로 나뉜다. 문자열 전체가 회문이 아닌 경우는 문자열의 왼쪽과 오른쪽 각각 하나씩 확인해서 알 수 있다. 문자열 전체가 회문인 경우는 또 두가지로 나뉘는데 문자열 전체가 같은 문자이면 -1을 출력하고, 처음이나 끝 문자 하나를 제외하면 팰린드롬인 경우는 원래 문자열에 -1을 한 값을 출력한다. ✍️ 후기 처음에는 첫번째 문자와 마지막 문자가 다르면 바로 그 길이를 출력하고, 그렇지 않다면 다시 for문을 돌면서 팰린드롬인지 아닌지 check하는 방식으로 풀었다. 이는 문자열의 길이 제한이 50만까지이므로 시간초과가 계속 났다. 결국 구글링을 해서 해답..

백준/C++ 2022.11.15

[백준/C++] 11656번 접미사 배열

🤔문제 이해 문자열의 앞 문자를 하나씩 차례로 없앤 문자열들을 사전순으로 정렬하여 출력하는 문제이다. 🔥풀이🔥 So Easy한 문제 ! 이중 for문으로 앞에서부터 문자를 하나씩 지운 문자열을 vector에 넣어주고 sort함수로 그 vector 배열을 정렬해주면 자동으로 사전순으로 정렬된다. 그러고 나서 배열에 저장된 문자열들을 차례대로 출력해주면 끝! #include #include #include using namespace std; vector strs; string s; int main() { cin.tie(nullptr); cout.tie(nullptr); ios::sync_with_stdio(false); cin >> s; for (int i = 0; i < s.size(); i++) { s..

백준/C++ 2022.11.14

[백준/C++] 17396번 백도어

🤔문제 이해 말은 거창하지만 전형적인 다익스트라 문제에 방문할 수 없는 구간이 존재한다는 것만 추가된 문제이다. 🔥풀이🔥 다익스트라로 구현을 하고 상대의 시야에 보이는 분기점은 방문하지 않도록 해주기만 하면 된다. 넥서스의 경우는 시야가 보이지만 갈 수 있어야 하므로 따로 0으로 처리해주었다. #include #include #include using namespace std; #define INF 10000000000 int n, m, a, b, t; bool sight[100001]; vector edge(100001); long long dist[100001]; int main() { cin.tie(nullptr); cout.tie(nullptr); ios::sync_with_stdio(false)..

백준/C++ 2022.11.11

[백준/C++] 20040번 사이클 게임

🤔문제 이해 선분을 긋다가 사이클이 발생하는 지점을 찾는 문제이다. 점의 위치를 정확히 몰라도 선분으로 이어져있는 경우를 찾으면 된다. 🔥풀이🔥 Find-Union 문제로 두 점을 이어줄 때마다 그 점들의 집합의 번호를 갱신해준다. 그러다가 어떤 두 점을 이을 때 한 점의 집합과 다른 한 점의 집합의 번호가 같다는 것은 이미 어떠한 경로로 연결되어 있는 상태에서 또 선분을 그어주는 것 즉, 사이클이 생기는 것이므로 그 때의 차례 번호를 ans 변수에 저장해둔다. m번까지의 차례는 모두 입력받아야 하기 때문에 flag를 통해 ans를 구한 경우엔 두 점을 입력받기만 하고 이외의 연산은 하지 않는다. 마지막으로 ans를 출력해주면 된다. #include using namespace std; int n, m,..

백준/C++ 2022.11.03

[백준/C++] 17404번 RGB거리 2

🤔문제 이해 1149번 RGB거리 문제의 변형이다. 이 문제에선 첫번째 선택한 집의 색과 마지막에 선택한 집의 색이 달라야 한다. 💡첫번째 아이디어 처음 선택한 색에 따라 dp 배열이 다르게 설정되어야 한다고 생각했다. 그래서 dp0, dp1, dp2 배열을 각각 선언해서 구현하였지만 왜 때문인지 4%에서 자꾸 틀렸다고 떴다 ㅠㅠ 다시 생각해보니 dp 배열이 다를 필요가 없었다!! 설명은 풀이 참조 ㄱㄱ 🔥풀이🔥 첫번째에 고를 색을 하나로 픽스해두고 1149번 RGB거리처럼 dp를 통해 가장 비용이 적게 드는 경우를 구하면 된다. dp[i][j] : i번째 집을 칠하는 j색 (j = 0 : red / 1 : green / 2 : blue) dp[i][0]은 dp[i-1][1]과 dp[i-1][2]중에서 ..

백준/C++ 2022.11.02
728x90