자바

    [스프링/자바] 좋은 객체 지향 설계의 5가지 원칙: SOLID

    인프런 강의 '스프링 핵심 원리 - 기본편' 을 보고 정리한 내용입니다. 단순히 객체 지향 프로그래밍에 대한 개념만 이해하다가 강의를 들으니까 이제서야 객체 지향 설계가 무엇인지에 대한 개념이 생기는 것 같다. 특히 단순히 인터페이스와 클래스를 구현하는 것만으로는 SOLID 원칙을 모두 지킬 수 없다는 점이 크게 와닿았다. 스프링에 대한 필요성을 이해하는 데 좋은 것 같다. 다들 왜 이 강의를 추천하는 지 알 것 같음.. SOLID SRP: 단일 책임 원칙(single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다 하나의 책임은 모호한 개념이다. SRP를 판단할 수 있는 중요한 기준은 변경 - 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것 한 클래스가 여..

    [백준] 17281 - ⚾ (자바 Java)

    [Gold IV] ⚾ - 17281 문제 링크 성능 요약 메모리: 295764 KB, 시간: 908 ms 분류 브루트포스 알고리즘(bruteforcing), 구현(implementation) 문제 설명 ⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종료되고, 두 팀이 공격과 수비를 서로 바꾼다. 두 팀은 경기가 시작하기 전까지 타순(타자가 타석에 서는 순서)을 정해야 하고, 경기 중에는 타순을 변경할 수 없다. 9번 타자까지 공을 쳤는데 3아웃이 발생하지 않은 상태면 이닝은 끝나지 않고, 1번 타자가 다시 타석에 선다. 타순은 이닝이 변경되어도 순서를 유지해야 한..

    [프로그래머스] 42888- 오픈채팅방 (자바 Java)

    [level 2] 오픈채팅방 - 42888 문제 링크 성능 요약 메모리: 161 MB, 시간: 86.89 ms 구분 코딩테스트 연습 > 2019 KAKAO BLIND RECRUITMENT 채점결과 정확성: 100.0 합계: 100.0 / 100.0 문제 설명 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다. "[닉네임]님이 들어왔습니다." 채팅방에서 누군가 나가면 다음 메시지가 출력된다. "[닉네임]님이 나갔습..

    [백준] 17136 - 색종이 붙이기 (자바 Java)

    [Gold II] 색종이 붙이기 - 17136 문제 링크 성능 요약 메모리: 22020 KB, 시간: 344 ms 분류 백트래킹(backtracking), 브루트포스 알고리즘(bruteforcing) 문제 설명 과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다. 색종이를 크기가 10×10인 종이 위에 붙이려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 0 또는 1이 적혀 있다. 1이 적힌 칸은 모두 색종이로 덮여져야 한다. 색종이를 붙일 때는 종이의 경계 밖으로 나가서는 안되고, 겹쳐도 안 된다. 또, 칸의 경계와 일치하게 붙여야 한다. 0이 적힌 ..

    [백준] 1931 - 회의실 배정 (자바 Java)

    [Silver I] 회의실 배정 - 1931 문제 링크 성능 요약 메모리: 165876 KB, 시간: 1136 ms 분류 그리디 알고리즘(greedy), 정렬(sorting) 문제 설명 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 ..

    [Spring] 제어 역전 IoC와 의존성 주입 DI

    IoC와 DI 제어 역전(IoC) 일반적인 자바 개발: 객체 선언 > 의존성 생성 > 객체에서 제공 일련의 작업들을 개발자가 직접 제어함 제어 역전: 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임 ‘외부’: 스프링 컨테이너(Spring Container) 스프링에서 제어 역전 Bean: 스프링에서의 객체 Container: Bean의 인스턴스화 조립, 관리의 역할, 사용 소멸에 대한 처리 담당 객체 생성 의존성 객체 주입: 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입 의존성 객체 메소드 호출 스프링 컨테이너가 객체를 만드는 시기: 컨테이너가 만들어질 때 필요한 객체를 모두 생성 cf. lazy-init: getBean을 할 때마다 객체가 생성 기본: 싱글톤 패턴 s..

    [백준] 2206 - 벽 부수고 이동하기 (자바 Java)

    [Gold IV] 벽 부수고 이동하기 - 2206 문제 링크 성능 요약 메모리: 339388 KB, 시간: 976 ms 분류 너비 우선 탐색(bfs), 그래프 이론(graphs), 그래프 탐색(graph_traversal) 문제 설명 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다. 만약에 이동하는 도중에 한 개의 벽을 부수고 이동하는 것이 좀 더 경로가 짧아진다면, 벽을 한 개 까지 부수고 이동하여도 된다. 한 칸..

    [백준] 16235 - 나무 재테크 (자바 Java)

    [Gold III] 나무 재테크 - 16235 문제 링크 성능 요약 메모리: 142464 KB, 시간: 1044 ms 분류 자료 구조(data_structures), 구현(implementation), 시뮬레이션(simulation) 문제 설명 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 떨어진 칸의 개수, c는 가장 왼쪽으로부터 떨어진 칸의 개수이다. r과 c는 1부터 시작한다. 상도는 전자통신공학과 출신답게 땅의 양분을 조사하는 로봇 S2D2를 만들었다. S2D2는 1×1 크기의 칸에 들어있는 양분을 조사해 상도에게 전송하고, 모든 칸에 대해..

    [백준] 17135 - 캐슬 디펜스 (자바 Java)

    [Gold III] 캐슬 디펜스 - 17135 문제 링크 성능 요약 메모리: 32012 KB, 시간: 312 ms 분류 브루트포스 알고리즘(bruteforcing), 그래프 이론(graphs), 구현(implementation), 시뮬레이션(simulation) 문제 설명 캐슬 디펜스는 성을 향해 몰려오는 적을 잡는 턴 방식의 게임이다. 게임이 진행되는 곳은 크기가 N×M인 격자판으로 나타낼 수 있다. 격자판은 1×1 크기의 칸으로 나누어져 있고, 각 칸에 포함된 적의 수는 최대 하나이다. 격자판의 N번행의 바로 아래(N+1번 행)의 모든 칸에는 성이 있다. 성을 적에게서 지키기 위해 궁수 3명을 배치하려고 한다. 궁수는 성이 있는 칸에 배치할 수 있고, 하나의 칸에는 최대 1명의 궁수만 있을 수 있다...

    [백준] 17471 - 게리맨더링 (자바 Java)

    [백준] 17471 - 게리맨더링 (자바 Java)

    [Gold IV] 게리맨더링 - 17471 문제 링크 성능 요약 메모리: 14924 KB, 시간: 136 ms 분류 너비 우선 탐색(bfs), 브루트포스 알고리즘(bruteforcing), 조합론(combinatorics), 깊이 우선 탐색(dfs), 그래프 이론(graphs), 그래프 탐색(graph_traversal), 수학(math) 문제 첫째 줄에 구역의 개수 N이 주어진다. 둘째 줄에 구역의 인구가 1번 구역부터 N번 구역까지 순서대로 주어진다. 인구는 공백으로 구분되어져 있다. 셋째 줄부터 N개의 줄에 각 구역과 인접한 구역의 정보가 주어진다. 각 정보의 첫 번째 정수는 그 구역과 인접한 구역의 수이고, 이후 인접한 구역의 번호가 주어진다. 모든 값은 정수로 구분되어져 있다. 구역 A가 구역 ..

출처: https://gmnam.tistory.com/157 [Voyager:티스토리]