개발공부 32

정적 변수, 메서드, 클래스, static static static

자바 프로젝트를 새로 만들면 항상 보이는 놈이 있다. public static void main(String[] args) { SpringApplication.run(BoardUpgradedApplication.class, args); } 이런식으로 존재하는 static 메서드가 존재한다. 근데 우리가 만드는 일반적인 클래스, 메서드, 변수들은 public class BoardUpgradedApplication 이런식으로 static이 아닌 클래스, 메서드, 변수를 쓴다. 이렇게 static이 붙은 것들을 '정적'을 앞에 붙여 부른다. 정적 클래스나 이런 것들의 특징이 무엇일까? static이 붙은 것들은 상위 객체와 수명을 같이한다. 즉, static클래스는 프로젝트와 시작과 끝을 같이하고, stati..

개발공부/자바 2023.01.02

[자바] 람다식을 쓰긴 썼는데 뭐하는 건지 모르겠어서 쓰는 정리글

스프링 스터디 프로젝트를 할 때 람다식이라는 개념이 처음 이야기되었다. "람다식을 쓰면 코드가 더 간결하고 쓰기 수월해진다. " 이런 말을 하면서, Comparator를 쓰거나 할 때 람다식을 이용했다. 그런데, 람다식이 무슨 말이고 왜 좋은지는 하나도 생각해본 적이 없다. 그래서 한번 공부할 겸 정리해보려고 한다. 람다식, 람다함수란 익명 함수로써, 함수의 단순화를 위해 사용한다. 익명 함수 => 말 그대로 이름이 없다. 정해진 것이 없어 파라미터로, 변수로 마음대로 사용 가능하다는 이야기들을 접했다. 기본적인 구조는 (연산에 사용할 변수) -> {연산 내용 ;}의 방식으로 사용되며, 단일 실행문이면서 return문이 없을 때에는 중괄호를 없앨 수 있다. 익명함수라는 말을 처음 들어보진 않았다. 자바스..

개발공부/자바 2022.11.14

[자바] stream()이 무엇일까?(1)

알고리즘을 풀다보면 HashMap을 다른 구조로 전환해야 하는 경우가 있다. 이를 위해서 for문을 돌리고, 이를 다시 List나 Array에 담아서 전환한 후에 이를 리턴해야 하는 수고스러움이 있다. 메서드를 분리함에 있어 이 때문에 새로운 for문 메서드를 만들고, 이 안에서 List에 담거나, 혹은 담는 조건이 있다면 조건문 메서드를 따로 만들어서 담는 방식을 사용했었다. 그러다가, stream()방식을 찾게 되었다. 이러한 수고스러움을 줄여주고, 조건을 하나의 문장에서 구현할 수 있고, 심지어 type을 변경시켜줄 수도 있다. (너무 편하다!) 이러한 stream()이 어떻게 되어있는지 찾아보았다. https://docs.oracle.com/javase/8/docs/api/java/util/str..

개발공부/자바 2022.11.01

[프로그래머스] 코딩테스트 Lv.1 신규 아이디 추천

Source Code : https://github.com/JangAJang/Algorithm/blob/main/프로그래머스_Lv1/신규%20아이디%20추천/src/Solution.java 다른 코딩공부나 시험기간이 겹쳐 알고리즘을 열심히 보진 못했지만, 그래도 푸는데 3일이나 걸렸다(말도안되는 이유때문에) 일단 7개의 과정을 거쳐야 한다. 1. 대문자는 전부 소문자로 바꾸어준다. 2. 소문자, 숫자, - , _ , . 를 제외하곤 전부 지워준다. 3. 점이 여러개 있을 경우 점 하나로 바꾸어준다. 4. 처음과 마지막이 점일 경우, 지워준다. 5. 문자열이 비어있을 경우, "a"를 넣어준다. 6. 문자열의 길이가 15를 넘으면 15까지 잘라주고, 마지막이 점이면 점도 지워준다. 7. 길이가 3 이하라면 ..

[프로그래머스] 코딩테스트 Lv.1 완주하지 못한 선수

Source Code : https://github.com/JangAJang/Algorithm/blob/main/프로그래머스_Lv1/완주하지%20못한%20선수/src/Solution.java 생각보다 문제의 수준 자체는 높지 않았던 것 같다. 해시맵으로 도착한 사람의 value를 +1, 도착 명단에 없는 경우 -1을 해주면 되었다. private HashMap includeParticipant(String[] par){ HashMap map = new HashMap(); for(String s : par){ includePersonToMap(s, map); } return map; } private void includePersonToMap(String s, HashMap map){ int count =..

[프로그래머스] 코딩테스트 Lv.1 키패드 누르기

Source Code : https://github.com/JangAJang/Algorithm/blob/main/프로그래머스_Lv1/키패드%20누르기/src/Solution.java 문제를 확인했을 때, 일반 핸드폰에 있는 키패드와 동일한 상태에서 움직여야 한다고 해서 처음엔 키패드를 배열로 구현할 생각을 했다. 근데 문득 든 생각은, '배열이 아니라 그 버튼의 주소를 저장하면 어떨까?' 였다. 기본적으로 0을 제외한 숫자들을 생각해보면, 그 수를 n이라고 했을 때, 그 수의 좌표는 {x/3, x%3}으로 설정해 보았다. 1 {0, 1} 2 {0, 2} 3 {1, 0} 4 {1, 1} 5 {1, 2} 6 {2, 0} 7 {2, 1} 8 {2, 2} 9 {3, 0} 이 상태를 그려보았을 때, 조금 상태가 ..

[프로그래머스] 코딩테스트 Lv.1 완주하지 못한 선수

https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr Source Code : https://github.com/JangAJang/Algorithm/blob/main/프로그래머스_Lv1/완주하지%20못한%20선수/src/Solution.java 코드에 대한 생각은 쉬웠다. 해시맵을 이용했는데, 해시맵은 key, value로 이루어져 있으며, key에 value를 매핑해서 저장시키는 용도이다. key를 이용해 value를 불러오고, 수정하고, 제거하고..

백준 2206번: 벽 부수고 이동하기

https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net Source Code : https://github.com/JangAJang/Algorithm/blob/main/백준_그래프와%20순회/벽%20부수고%20이동하기/src/Main.java 처음에 간단한 BFS문제로 알고, 코드를 바로 구상할 수 있었다. 근데 틀렸다고 나왔다. 틀린 코드 : https://github.com/JangAJang/Algorithm/blob/ma..

개발공부/백준 2022.10.17

백준 1697번: 숨바꼭질

https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net Source Code: https://github.com/JangAJang/Study/blob/main/백준_그래프와%20순회/숨바꼭질/src/Main.java 이전에 풀었던 BFS와 똑같이 큐로 접근해야겠다는 생각이 들었다( 이전 bfs문제에서 배열을 쓰다가 시간 낭비가 상당했다) 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤..

개발공부/백준 2022.10.15

백준 2178번: 미로 탐색

https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net Source Code : https://github.com/JangAJang/Study/blob/main/백준_그래프와%20순회/미로%20탐색/src/Main.java 요약 : BFS를 쓸 때, 갈 일이 없는 노드를 가지 않음으로 시간소요를 줄일 수 있다. (반복문 -> Queue를 이용해 계산 필요 없는 노드 제거) BFS문제이다. 학교에서 배운 BFS의 이론에선 1. 같은 레벨의 노드들을 먼저 확인한다. 2. 이후에 리프 노..

개발공부/백준 2022.10.14