목록전체 글 (77)
땃쥐네
문제 번호 : 120840 제목 : 구슬을 나누는 경우의 수 난이도 : Level 0 서로 다른 balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수 문제 : 링크 필요 알고리즘 재귀 함수에 대한 이해가 필요하다. 조합수에 대한 간단한 이해가 필요하다. (고등학교 수학) 조합수는 n개의 요소에서 r개의 요소를 선택하는 경우의 수이다. 이 글에서는 n개의 요소에서 r개의 요소를 선택하는 조합수를 comb(n,r)이라 할 것이다. 조합수의 성질 comb(n,r) == comb(n, n-r) : n개의 요소에서 r개를 택하는 것은, 나머지 n-r개를 결정하는 것과 같다. comb(n,1) == comb(n,n-1) == n : n개의 요소에서 1개를 택하는 경우의 수는 n가지이다. com..
문제 번호 : 064061 제목 : 크레인 인형뽑기 게임 난이도 : Level 1 문제 : 링크 필요 알고리즘 Stack 자료구조에 대한 이해가 필요하다. java에서 Stack을 사용할 때는 java.util.Stack 을 사용한다. push(삽입), pop(추출), peek(마지막 요소 확인), isEmpty 메서드를 잘 사용하면 된다. Stack에 아무 요소가 없을 가능성이 있으므로 추출할 때는 isEmpty 메서드를 사용해 요소의 존재 여부를 파악해야 한다. peek 메서드를 통해 마지막 요소를 확인할 수 있다. 풀이 github 링크 : 링크 전체 로직 public class Solution { private static int answer = 0; public int solution(int[]..
오브젝트의 15장을 읽으며 디자인 패턴 이야기가 나온 부분에서 Composite 패턴을 접했는데, 최근 SpringSecurity의 DelegatingPasswordEncoder 코드를 확인하는 과정에서 컴포짓 패턴이 적용된 것을 확인하게 되었고 컴포짓 패턴이 무엇인지 간단하게 정리해보기로 했다. 클라이언트와 Component의 컴파일 의존관계 - 어떤 객체가 '클라이언트'에게 foo 메시지를 전송하였다. - 클라이언트는 foo 메시지에 자기 나름의 방식대로 처리(메서드)하고 응답 할 책임을 가진다. - 하지만 이 과정에서 클라이언트 스스로 처리할 수 없는 일은 내부적으로 알고 있는 Component 역할에게 operation() 메시지를 전송하여 협력을 요청한다. - Component 역할을 수행할 수..
도커를 다루는 작업은 결국 이미지로부터 컨테이너를 띄우고, 컨테이너를 정지시키거나 없애거나 하는 행위의 흐름을 통해 이루어진다. 도커의 컨테이너 상태를 확인할 수 있어야하고, 명령어를 통해 컨테이너의 상태를 변경할 수 있어야한다. 이를 위한 기본적인 명령어들을 몇 가지 확인해보려고 한다. 1. docker ps : 실행 중인 컨테이너 확인 1.1 실습을 위해 우분투 컨테이너를 백그라운드에서 실행 docker run -d -t ubuntu:22.04 우분투 이미지를 컨테이너화 해서 백그라운드에서 실행한다. 백그라운드에서 계속 실행되어야할 때가 있는데 이럴 경우 -d 옵션을 붙여주면 된다. 웹 서버와 같이, 백그라운드에서 계속 운영하는 애플리케이션을 동작 시킬 경우 이 옵션을 사용하면 된다. 1.2 실행 중..
이 글은 - '강민철'님의 책 '혼자 공부하는 컴퓨터구조 + 운영체제' 책을 읽으며 학습한 내용을 정리합니다. Intro 앞에서 학습했듯 컴퓨터는 결국 0과 1만 이해할 수 있다. 인간이 이해할 수 있는 문자들도 결국 0과 1의 비트로 변환되고, 컴퓨터는 이를 기반으로 해석해서 처리한다. 그렇다면 우리가 작성한 문자들은 어떤 형태의 비트로 변환되는 걸까? 이 규칙도 여러가지가 있는데 이를 확인해보는 것은 컴퓨터에 대한 이해를 증진시키는데 도움되기 때문에 한번쯤은 다뤄볼 필요가 있다. 1. 문자 집합, 문자 인코딩, 문자 디코딩 1.1 문자 집합(Character Set) 컴퓨터가 인식하고 표현할 수 있는 문자들의 모음 예) ASCII 문자집합, EUC-KR 문자 집합, CP949 문자 집합, ... 어떤..
이 글은 - '강민철'님의 책 '혼자 공부하는 컴퓨터구조 + 운영체제' 책을 읽으며 학습한 내용을 정리합니다. 1. 정보단위 : 비트, 바이트, ... 1.1 비트 0 과 1을 나타내는 가장 작은 정보 단위 1비트는 2가지 정보를 표현할 수 있다. 2비트는 2**2 가지 정보를 표현할 수 있다. n비트는 2**n 가지 정보를 표현할 수 있다. 1개의 비트를 통해 2가지 정보를 표현할 수 있고, 이를 확장하여 여러 개의 비트를 통해 다양한 정보를 표현할 수 있게 된다. 1.2 비트의 묶음 바이트 : 1byte == 8bit 킬로바이트(KB, Kilobyte) : 10**3(==1000) byte 메가바이트(MB, Megabyte) : 10**6 byte == 1000 KB 기가바이트(GB, Gigabyte..
이 글은 - '강민철'님의 책 '혼자 공부하는 컴퓨터구조 + 운영체제' 책을 읽으며 학습한 내용을 정리합니다. 이 책의 1부, 컴퓨터 구조 부분에서 결국 아래의 내용을 다룬다. 1.2절에서는 전체적인 흐름을 확인한다. 컴퓨터가 이해하는 정보 : 데이터, 명령어 컴퓨터의 네가지 핵심 부품 : CPU, 메모리, 보조기억장치, 입출력장치 1. 컴퓨터가 이해하는 정보 : 데이터, 명령어 1.1 데이터 컴퓨터가 이해하는 숫자, 문자, 이미지, 동영상과 같은 정적인 정보 실제로는 0과 1들로 구성되어 있다. 예) '1', '2','cat.jpg' 1.2 명령어 데이터를 움직이고 컴퓨터를 작동시키는 정보 실제로는 0과 1들로 구성되어 있다. 예) '1과 2를 더하라', 'cat.jpg를 USB에 저장하라.' 2. 컴..
이 글은 - '강민철'님의 책 '혼자 공부하는 컴퓨터구조 + 운영체제' 책을 읽으며 학습한 내용을 정리합니다. 1.1 문제 해결 역량 향상 문제가 발생했을 때, 컴퓨터 구조를 이해하고 있다면 문제 상황을 진단할 수 있고, 문제 해결의 실마리를 다양하게 찾을 수 있다. 기업에서도 이러한 역량이 업무 수행에 필요하다는 것을 알고 있기 때문에, 각종 기술 면접에서 컴퓨터 구조에 대한 소양을 검증하거나 반드시 알아야 하는 분야로 명시하기도 한다. 견고한 컴퓨터 구조 지식은, 문법에 맞는 코드만 작성할 줄 아는 개발자를 넘어 다양한 문제를 스스로 해결할 줄 아는 개발자를 만들어 준다. 2. 성능/비용, 용량 문제를 고려할 수 있는 개발자가 될 수 있다. 컴퓨터 구조를 이해하면 입력과 출력에 집중하는 개발을 넘어 ..