분류 전체보기 129

[2577] 숫자의 갯수

[2577]숫자의 갯수세개의 자연수 A, B, C가 주어질 때, A × B × C를 계산한 결과에0부터 9까지 각각의 숫자가 몇번씩 쓰였는가?순서대로, 하나씩 차근차근 풀어보자.어떤 사람이 필요한가?문제의 예제를 분석하며 한번 우리가 직접 세보고, 어떠한 과정을 거쳤는지 생각해보자.A, B, C를 곱한 결과값을 계산한다. 그 결과로 17037300 이라는 숫자가 등장했다.우리는 그 다음, 각 자릿수별로 어떠한 숫자가 있는지를 확인했다.근데 총 10종류의 숫자가 각각 등장한 횟수를 머릿속에서 다 외우고 있긴 어렵기 때문에, 아래에 각 숫자가 몇번 등장했는지를 기록하며 풀었다.최종 결과로 3 1 0 2 0 0 2 0 0 이라는 결과가 등장했다.이때 재미있게 볼만한 정보는 다음과 같다.기존 숫자의 170373..

PS/Baekjoon OJ 2024.12.03

[몰입] 무한 성장 - 몰입의 조건

칙센트미하이 교수님의 "몰입" 을 읽고, 개인적으로 느낀 소감으로, 제대로 된 내용은 해당 도서를 읽고 참고해 주시길 바랍니다.무한성장의 조건아래의 1번부터 9번까지의 사고 흐름이 물흐르듯이 이어져야 몰입의 상태가 완성된다.자신이 알 수 있을 것이란 확신스스로를 믿고 있어야 한다.자신을 믿지 못하면, 스스로에 대한 통제감을 상실하고 자신이 통제할 수 있을 거라 생각하는 좀 더 쉬운 문제를 찾게 된다."현재 나 자신"의 포기"개인적인" 욕망이 병렬로 접근하면, 몰입에 순수하게 만족하지 못하게 된다."아무일도 하지 않고, 중간만 가자" 하면, 세상에 도움이 되기 위한 시작조차 할 수 없다.미래의 기쁨을 위해 현재를 희생할 각오가 되어 있어야 한다.단순한 감정의 포기 및 평온한 상태의 유지가 아닌, 자기 자신..

개인적 공간 2024.11.23

[네트워크] 소켓 통신의 기본

글의 목적개발자가 일반적으로 사용하는 모든 TCP 네트워크 통신의 "API"인 소켓 통신의 기본 동작 원리를 이해함으로써, 추상화되어 잊기 쉬운 전송계층의 동작 원리를 "알아야 하는 부분까지" low Level 로 이해하기 위함이다.Top-Down 으로 접근하기에, 추후 전송 계층의 TCP 와 네트워크 계층의 IP까지 다룰 예정이다.서버(Server) & 클라이언트(Client) 모델우리가 컴퓨터에서 흔히 접하는 "클라이언트 & 서버" 라는 단어는 엄청 있어보이지만, 사실 실세계에서 매우 흔히 볼 수 있는 형태의 모델을 추상화해둔 패턴이다.클라이언트(Client)클라이언트는 서비스를 요청하는 쪽이다. 마치 식당에서 음식을 주문하는 손님처럼, 클라이언트는 어떤 정보를 얻거나 작업을 처리해달라고 요청하는 역..

Div.2 #930 C - Bitwise Operation Wizard

https://codeforces.com/contest/1937/problem/C현재 주어진 연산으로 가능한 것최댓값 찾기: a|a 최솟값 찾기: a|a 현재 주어진 순열은 [0, n-1] 범위를 갖는다.따라서, XOR로 만들 수 있는 최대의 정수는 상한이 정해져 있다.px ^ py = (n - 1의 msb) * 2 - 1그렇다면, 저 상한을 어떻게 만들어낼 것인가?최댓값(n-1)을 찾는다.최댓값과 or 연산을 수행하여 가장 큰 값을 만드는 인덱스들을 찾는다.해당 인덱스들의 집합에 들어가기 위해선 최댓값의 하위 비트가 0인 비트들을 1로 채울 수 있어야 한다. 예시) 11010 -> 1101, 101, 111, 10111XOR 도 결국 OR 되어야 하는데, 그냥 이러면 어떻게 답 안나오나 라는 느낌으로 ..

PS/Codeforces 2024.11.08

[객체지향] 일급 컬렉션

일급 (”First-class”) 이란?다음과 같은 조건을 만족하는 요소변수에 할당될 수 있음함수의 매개변수로 전달할 수 있음함수의 반환값으로 사용할 수 있음자료구조(배열, 객체 등) 에 저장할 수 있음일급 컬렉션컬렉션 자체를 하나의 클래스로 감싸놓은 것위 “일급 객체”의 “일급”과 다르다.컬렉션 자체에 하나의 “비즈니스적 이름”을 지어줘야 할 때 사용하는 일종의 패턴일급 컬렉션의 구조리스트를 클래스로 감싸놓음List에 대한 직접 접근을 막고, Users 클래스의 메소드로만 List에 접근을 허용하도록 접근을 제어List 내부의 원소에 적용해야 하는 연산에 대해, 지정된 메소드로만 내부 원소들에 연산을 적용하도록 한다일급 컬렉션을 만들어야 하는 이유컬렉션 자체에 비즈니스적 특징이 주어질 때 → 컬렉션에 ..

[Number Theory]디오판토스 일차방정식의 해의 존재성 증명

오늘도 코드포스 문제풀이를 하던 도중, 익숙한 방정식의 형태가 등장했는데, 정확히 어떻게 풀어야 하는지 기억이 잘 나지 않아, 이번 기회에 확실하게 정리하려고 한다.Div.2 # 955 D번을 풀던 중, 다음과 같은 방정식을 마주하게 되었다.$$ D = px + qy + rz + ... (x, y,z,... \in \mathbb{Z}) $$다음과 같은 형태의 방정식을 "디오판토스 일차방정식" 이라고 한다.실제로 디오판토스 방정식은 차수가 하나씩 늘어갈수록 난이도가 지수적으로 증가한다고 한다.지나치게 깊게 들어가지 않으면서, 적절하게 해당 해의 존재성을 증명하는 방법을 알아보자.위 방정식의 해가 존재하는 지를 구성적 증명으로 처리하려면, 완전 탐색 or 그래프 탐색 방식으로 접근해야 하는데, 이는 지나치게..

PS/이론 2024.10.14

[Test] LocalDateTime 을 사용하는 함수의 테스팅 방법

LocalDateTime 을 사용하는 함수는 어떻게 테스팅 해야하지?테스트 코드를 작성하는 도중, LocalDateTime 에 따라 기능이 달라지는 함수를 테스팅할 필요성을 느끼게 됐다.근데 LocalDateTime.now()를 사용하게 되면, 테스트가 현재 시간에 따라 테스트 결과가 달라지는 상태가 되고, 이는 테스트는 반복가능해야 한다라는 테스트 규칙을 위반하게 된다.가장 단순한 해결책은 LocalDateTime을 Mocking 하는 것이겠지만, 이는 권장되지 않는 방법이다.@Mock 어노테이션은 매 테스트마다 새로 초기화되기 때문에, 반복가능한 테스트 문제에 대한 걱정이 없지만,LocalDateTime 은 static 메소드라 메소드 영역에 존재하고, 다음 테스트에서 여전히 그 모킹이 유지되어 있을..

소프트웨어 공학적인 개발 방법

애플리케이션 개발 순서요구사항 분석뭐가 확장될 것 같은지, 아키텍쳐를 어떻게 설계할지 이 단계에서도 같이 생각 해보기주어져야 하는 메시지를 보고, 어떠어떠한 도메인(객체)가 있는지 생각해보기. → Domain-Driven Design안정적인 구조(확실한 도메인)가 확장성 높은 소프트웨어를 만든다.아키텍처 설계도메인 탐색도메인 별 정의 서술 (Documentation)도메인 별 유스케이스 다이어그램 생성유스케이스별 협력, 책임, 역할 다이어그램화“기능 별”로 필요한 객체 다이어그램 설계 - 해당 기능을 구현하는 데 사용되는 객체들 생성하기다이어그램이 잘 안그려진다면 → 빼먹은 액터는 없는지, 단위기능이 너무 큰건 아닌지 분리해보기필요한 책임에 따른 아키텍쳐 설계도메인의 역할, 책임(기능), 협력(메시지) ..

Div.2 #961 C - WA

문제 링크: https://codeforces.com/contest/1995/problem/C오버플로우를 막는 방법에 대한 고민핵심 아이디어a^x^2 a^x >= b^y 인 경우는 없다증명1 초과인 a, b, x, y에 대하여a^x a^x^2 > b^y 이면a^x^2 a^x = p, b^y = q 라고 하면p p * p p * p 따라서 핵심은, 몇번의 제곱을 수행해야 하느냐!오버플로우를 신경쓰지 않도록, 2^63 내에서 대소 비교를 수행하는 방법실제 문제를 풀진 못했으므로, 구현은 남기지 않음

PS/Codeforces 2024.09.29

[OS] Thread의 정의와 Thread Pool, 그리고 적절한 Thread의 갯수

글의 목적우리가 컴퓨터를 살때, CPU가 8코어 16스레드라고 하는 수치를 보고, 오... 16개의 스레드까지 병렬 프로그래밍이 가능하구나... 라는 생각을 하게 된다.근데 운영체제에서 마주치는 "스레드"라는 단어는 위 내용과는 사뭇 다른 느낌으로 정의된 단어라는 느낌이 강렬하게 들게 된다.또한, 스레드 풀에서의 스레드와도 비슷한 개념이면서 미묘하게 다른 점을 갖고 있고, 이게 혼동되기 쉽다고 생각한다.따라서, 이를 체계적으로 정리하고자, 해당 글을 작성한다.CPU 에 존재하는 스레드는 무엇인가?해당 스레드라는 단어는, 원래 정식 명칭이 아니다.과거에 이 "스레드"는, Simultaneous Multi-Threading 이라는 기법으로 불렸으나, 인텔(Intel) 의 상술로 "하이퍼스레딩" 이라는 상표명..