분류 전체보기

    자바 접근제어자(Access Modifier) 개념과 사용

    제어자(modifier) 제어자는 클래스와 클래스 멤버의 선언 시 사용하여 부가적인 의미를 부여하는 키워드를 의미한다. 자바에서는 접근 제어자와 기타제어자로 구분한다. 접근 제어자는 두 개 이상 함께 사용하는 것이 불가하지만, 기타 제어자는 경우에 따라 여러개를 함께 사용 가능하다. 접근제어자 사용 이유 클래스 내부에 선언된 데이터를 보호하기 위함이다. 유효한 데이터 값을 유지하기 위해 외부에서 함부로 변경하지 못하도록 접근이 제어하는 것이다. 이를 정보 은닉(data hiding)이라고 하며 객체지향에선 캡슐화(encapsulation)라고 한다. 정보 은닉이란 사용자가 알 필요가 없는 정보는 숨겨야 한다는 개념으로, 정보 은식을 통해 사용자는 최소한의 정보로 손쉽게 프로그램을 사용할 수 있도록 하기 ..

    Commit convention 지키기 (feat. Angular.js)

    📌 커밋 메세지 구조 (Commit Message Structure) 바디와 풋터 부분은 생략 가능하다. 바디는 부연 설명이 필요한 경우, 풋터는 이슈 번호 등을 작성할 때 활용한다. : subject summary -> 커밋메세지 헤더 body -> 커밋메세지 바디 footer -> 커밋메세지 풋터 📄커밋 메세지 헤더(Commit Message Header) 에 들어갈 수 있는 항목 feat(feature) : 새로운 기능 추가 fix(bug fix) : 버그 수정 docs(documentation) : 문서 작업 style(formatting, missing semi colons) : 코드 포맷팅, 코드 변경이 없는 경우 refactor : 코드 리팩토링 test(when adding missing ..

    [Java] Enum 클래스의 개념과 사용

    최근 새롭게 자바 공부를 시작해서 프로그래밍을 하며 알게 된 지식들을 조금씩 블로그에 정리해보려 한다. 첫 번째는 Enum 클래스다. 📌 Enum의 의미와 개념 Enum이란 Enumeration의 앞글자로 '열거'라는 의미로 관련 있는 상수들의 집합을 나타내는 클래스이다. 대표적으로 요일이나, 계절 처럼 서로 의미있고 한정적인 데이터 집합들을 나타낼 때 사용한다. 클래스 내 선언하는 상수가 많아질수록 네이밍이 겹치는 것을 막고 상수값 관리를 용이하게 하기 위해 Class 대신 Enum을 사용한다. Enum은 단순히 데이터의 집합이 아니라 온전한 클래스 형태로 보며 상태와 행위를 한 곳에서 관리할 수 있다는 특징이 있다. enum 생성자는 private으로 선언 📄 Enum을 사용하는 이유 아래 두 가지 ..

    [프로그래머스] 문자열 내림차순으로 배치하기 / 자바 / Java / stringBuilder

    💡solutions 💬 String.toCharArray()를 사용하여 문자열 s를 char형 배열(arr[ ])로 바꾼다. * 참고로 char형 배열을 하나의 문자열로도 만들 수 있다 -> String s1 = new String(charArr); 💬 arr 배열을 오름차순으로 정렬한다. 💬 stringBuilder을 사용하여 각 문자들을 appned()로 더한 후 문자열을 출력하기 위해 toString()을 사용한다. stringBuilder을 사용하는 이유 자바에서 String 객체는 변경 불가능하다. 따라서 String 객체끼리 더하는 연산은 메모리 할당과 해제를 발생시켜 성능적으로 좋지 않기 때문에 stringBuilder을 사용한다. stringBuilder은 String 객체를 더할 때 새로..

    [백준] 파티 / 1238번 / Python / 파이썬 / 다익스트라(Dijkstra) 알고리즘

    💡solutions 💬 heap 최소힙 자료구조를 활용하여 다익스트라 알고리즘으로 해결하였다. 💬 먼저 N명의 학생들마다 X번 마을에 왕복으로 다녀오는데 걸리는 최소 시간을 구한다. -> 이때 편도가 아니기 때문에 최소 시간은 dijkstra(i, x) + dijkstra(x, i)으로 ① i번 학생이 본인의 마을에서 X번 마을로 가는 최소 시간과 ② X번 마을에서 출발하여 본인 마을로 돌아오는 데 걸리는 최소 시간을 더하면 된다. 💬 마지막으로 각 학생들이 X번 마을에 다녀오는데 걸린 최소 시간을 비교하여 가장 많은 시간을 소비한 학생의 소요시간을 출력하면 된다. 👨‍💻code import heapq import sys def dijkstra(start, end): distance = [INF] * (..

    [백준] 도시 분할 계획 / 파이썬 / Python / 크루스칼 알고리즘 / Kruskal

    💡solutions 💬 크루스칼 알고리즘을 사용해서 문제를 해결했다. 💬 하나의 마을을 분리하여 두개의 마을로 분활하면 -> 각 마을 안에 있는 집들은 서로 연결돼 있어야 하며 이때 길의 유지비의 합은 최소가 돼야 한다 💬 크루스칼 알고리즘을 활용하여 N-1개의 집들을 연결하고 마지막 유지비가 최대인 경로는 끊으면 (즉, 연결하지 않으면) 이게 바로 유지비가 최소가 되도록 마을을 두개로 분활하는 방법이다. -> 각 집을 연결할 때마다 edge_cnt를 세서 간선의 개수가 n-2가 되면 break한다. (*참고로 MST에서 모든 간선을 연결할 때 최소 간선의 개수는 n-1이다.) 💬 처음에 파이썬으로 코드를 제출했을 때 시간초과가 났고, sys 모듈을 불러와서 input = sys.stdin.readlin..

    [백준] 보석 도둑 / 1202번 / 파이썬 / Python / heapq/ 힙큐

    💡solutions 💬 heapq모듈을 사용하여 최소힙, 최대힙 자료구조를 사용하였음. 💬 보석들은 무게가 작은 순서대로 뽑힐 수 있도록 최소힙으로 구현 💬 가방은 제한된 무게를 기준으로 가벼운 것부터 무거운 순으로 나오도록 오름차순 정렬 💬 for 반복문을 통해 작은 무게 제한을 가진 가방부터 꺼내와서 제한된 무게보다 가벼운 보석들을 임시 리스트인 tmp에 모두 담아둔다 -> 이때 주의할 점은 추후 tmp에서 가장 비싼 애들부터 순서대로 뽑을 수 있게 가격에 마이너스 부호를 붙여 tmp 리스트에 heappush로 넣어준다. (이게 바로 최대힙 구현하는 방법) 💬 가방에 담을 수 있는 보석 중 가장 제일 비싼 가격의 보석을 뽑아서 answer에서 빼준다 -> 애초에 보석 가격을 음수로 넣어놨기 때문에 a..

    [프로그래머스] 섬 연결하기 / 파이썬 / Python / 크루스칼(Kruskal) 알고리즘

    💡solutions ) 💬 '최소 비용으로 모든 노드(섬) 연결' -> 최소 신장 트리(MST)를 사용하는 크루스칼 알고리즘 활용 문제다. 신장 트리(Spanning Tree)란? 그래프 내의 모든 정점을 연결하는 트리로 간선의 개수가 n-1개로 최소 연결 부분 그래프이다. 최소 신장 트리(Minimum Spanning Tree )란? 신장 트리에서 사용된 간선들의 가중치의 합이 최소인 트리 즉, 최소 비용으로 모든 노드 연결하는 그래프이다. 참고 블로그 💬 먼저 다리 건설 비용 기준으로 costs를 오름차순 정렬한다. -> 적은 비용의 노드부터 꺼내와서 연결한다. 💬 노드의 부모를 찾는 find_parent를 통해 꺼내온 두 노드의 부모를 비교한다. ->사이클이 생기지 않게 하기 위해 부모가 다른 경우..

    [프로그래머스] 약수의 합 / 자바 / Java

    💡solutions ) 💬 for 반복문을 통해 n을 i로 나누었을 때 0이되는 약수들을 모두 찾아서 더해주면 되는 문제이다. 💬 참고 : 약수를 찾는 것이기 때문에 for문에서 주어진 n에 대해서 n / 2까지만 약수인지 확인해주면 돼서 계산을 반으로 줄일 수 있다. => for (int i=1; i

    [프로그래머스] 가운데 글자 가져오기 / 자바 / Java / substring()

    💡solutions ) 💬 자바 언어 공부를 시작한지 얼마 안돼서, 문법 공부를 할겸 프로그래머스 기본 문제들을 다시 풀어보고 있다. 💬 파이썬에서는 문자열을 s[:2] 이런식으로 간편하게 슬라이싱할 수 있는데, 자바에서는 해당 인덱스의 문자열을 반환하는 substring() 메소드를 사용한다. substring() 메소드는 인자의 개수에 따른 차이 ✔ substring(int Index) 해당 인덱스부터 끝까지 문자열 반환 ✔ substring(int IndexA, int IndexB) 인덱스 A부터 B 직전까지의 문자열 반환 👨‍💻code ) class Solution { public String solution(String s) { String answer = ""; int a = s.length(..

    [프로그래머스] 체육복 / 자바 / Java / 그리디(Greedy) 알고리즘

    💡solutions ) 💬 처음 코드를 제출했을 때 테스트케이스 13, 18번이 실패하였다. 8월 30일 기준으로 테케가 추가됐다고 하는데 아마도 lost나 reserve가 순서대로 들어오지 않은 경우일 것이다. (예를 들면, lost = [4,3,5]) 이때 sorting을 해주지 않으면 통과하지 못하게 된다. 💬문제에서 주어진 제한사항 중 5번째부터 해결한다. -> 첫 번째 이중 for문에서 여분의 체육복이 있지만 동시에 체육복을 도단당한 학생의 경우 다른 학생에게 체육복을 빌려줄 수 없는 상태로 만든다 reserve[j] = -1; 그리고 도난당한 학생 리스트에서도 제외해준다 lost[i] = -1; 💬 잃어버린 학생의 앞 또는 뒤에 있는 다른 학생으로부터 체육복을 빌려올 수 있는 경우 -> 빌려주..

    메타버스(Metaverse)행 열차, 금융권도 탑승한다

    요즘 메타버스(Metaverse)가 큰 화제다. 세계적인 IT공룡기업인 페이스북(facebook)도 메타버스 기술을 주력하여 개발할 것으로 밝히며 기업 이름까지도 메타(Meta)로 변경하였다. 메타버스(Metaverse)란? 메타버스라는 것은 가상을 뜻하는 ‘메타(meta)’와 현실세계를 뜻하는 ‘유니버스(universe)’의 합성어다. 즉, 현실과 비슷한 가상세계라는 의미다. 더 직관적으로 정의하면 ‘AR(Agumented Reality)과 VR(Virtual Reality) 기술이 만들어내는 모든 가상세계’를 뜻한다. 영화나 게임 등 미디어 산업에서 주로 찾아볼 수 있었지만, 요즘 같이 팬데믹이 심해지고 IT기술이 발전하면서 비대면 상황 속에서 많은 사람들이 접속하여 소통할 수 있는 환경이 구축되고 ..