분류 전체보기
2021 KAKAO BLIND RECRUITMENT 메뉴 리뉴얼(C++)
문제 설명 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 새로운 메뉴를 제공하기로 결정했습니다. 어떤 단품메뉴들을 조합해서 코스요리 메뉴로 구성하면 좋을 지 고민하던 "스카피"는 이전에 각 손님들이 주문할 때 가장 많이 함께 주문한 단품메뉴들을 코스요리 메뉴로 구성하기로 했습니다. 단, 코스요리 메뉴는 최소 2가지 이상의 단품메뉴로 구성하려고 합니다. 또한, 최소 2명 이상의 손님으로부터 주문된 단품메뉴 조합에 대해서만 코스요리 메뉴 후보에 포함하기로 했습니다. 예를 들어, 손님 6명이 주문한 단품메뉴들의 조합이 다음과 같다면, (각 손님은 단품메뉴를 2개 이상 주문해야 ..
[1456] 거의 소수(C++)
문제 어떤 수가 소수의 N제곱(N ≥ 2) 꼴일 때, 그 수를 거의 소수라고 한다. 두 정수 A와 B가 주어지면, A보다 크거나 같고, B보다 작거나 같은 거의 소수가 몇 개인지 출력한다. 입력 첫째 줄에 왼쪽 범위 A와 오른쪽 범위 B가 공백 한 칸을 사이에 두고 주어진다. 출력 첫째 줄에 총 몇 개가 있는지 출력한다. 해결 방법 에라토스테네스의 채를 이용한 문제이다. 에라토스테네스의 채는 소수를 쉽게 찾는 방법인데, 채에다가 찌꺼기를 걸러내는 것처럼 소수를 찾아나가는 것이 아니라 소수가 아닌 애들을 걸러내는 방식이다. 이렇게 소수 여부를 저장했으면 각 소수의 2배수, 3배수.... 중에 A보다 크거나 같고 B보다 작거나 같은 수를 찾으면 된다. 이때 주의해야 할 부분이 있는데 while(num
Git & GitHub
Git Git이란, 무료 오픈 소스 분산 버전 관리 시스템(VCS, Version Control System)이다. 분산 버전 관리 시스템이라는건 간단하게 말해서 나중에 특정한 버전을 불러올 수 있도록 소스 코드 같은 파일의 변경사항을 기록하는 시스템을 말한다. 이런 역할을 하는건 Git뿐만 아니라 Bitbucket, Gitlab이라는 것도 있다. Git의 장점 1. 버전 관리 이런 경우를 한번 가정해보자. 고객한테 이러이러한 기능을 만들어달라는 문의가 들어와서 Ver.1 기능도 추가하고 또 새로운 기능을 추가해서 Ver.2를 만들고 또 새로운 기능을 추가해서 Ver.3도 만들고 이렇게 Ver.4까지 완성을 했는데 갑자기 고객이 이거 다 별로고 처음 버전(Ver.1)이 가장 좋은 것 같다고 하는데! 이럴..
MVC 패턴
MVC 패턴 MVC 패턴은 모델(Model), 뷰(View), 컨트롤러(Controller)로 이루어진 디자인 패턴이다. MVC 패턴은 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다. MVC의 각 컴포넌트의 역할 [Model] 모델은 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻한다. 예를 들어, 사각형 모양의 박스 안에 글자가 들어있다면 이 사각형 모양의 박스 위치 정보, 글자 내용, 글자 위치, 글자 포맷 등에 관한 정보를 모두 가지고 있어야 한다. 뷰에서 데이터를 생성하거나 수정하면 컨트롤러를 통해 모델을 생성하거나 갱신한다. [View] 뷰는 UI 로직과 데이터를 시각적으로 표시하는 방법, 즉 웹 애플리케이션 또는 ..
함수형 프로그래밍
함수형 프로그래밍 함수형 프로그래밍은 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해 준다. 또한, 모든 것을 순수한 수학적 함수 스타일로 묶으려고 하는 프로그래밍 패러다임이다. 함수형 프로그래밍은 '어떻게 해결할 것인가'가 주안점인 명령형 스타일과 달리 '무엇을 해결할 것인가'가 주안점이다. 함수형 프로그래밍을 지원하는 언어들에는 Haskell, JavaScript, Python, Scala, Erlang, Lisp, ML 등이 있다. 함수형 프로그래밍의 특징 1. 순수 함수 int sum(int a, int b) { return a + b; } sum 함수는 두 개의 숫자만 입력받아 두 수의 합을 반환하는..
TDD(Test-Driven Development)
🚀 TDD란 무엇인가 Test-Driven Development(TDD)는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다. TDD는 설계 이후 코드 개발 및 테스트 케이스를 작성하는 기존의 개발 프로세스와 달리, 테스트 케이스를 먼저 작성한 후 이 테스트가 통과할 수 있는 실제 코드를 개발하여 리펙토링 하는 절차를 따른다. 이러한 이유로 TDD를 Test First Development라고도 한다. ♻️ TDD 사이클 1️⃣ Add a test 2️⃣ Run all tests and see if the new test fails (처음에는 production code가 없기 때문에 테스트가 실패하는게 당연) 3️⃣ Write the code 4️⃣ Run tests 5️⃣ Refa..
[2529] 부등호(C++)
문제 바로가기 두 종류의 부등호 기호 가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시된 부등호 순서열 A가 다음과 같다고 하자. A ⇒ 부등호 기호 앞뒤에 넣을 수 있는 숫자는 0부터 9까지의 정수이며 선택된 숫자는 모두 달라야 한다. 아래는 부등호 순서열 A를 만족시키는 한 예이다. 3 1 7 0 이 상황에서 부등호 기호를 제거한 뒤, 숫자를 모두 붙이면 하나의 수를 만들 수 있는데 이 수를 주어진 부등호 관계를 만족시키는 정수라고 한다. 그런데 주어진 부등호 관계를 만족하는 정수는 하나 이상 존재한다. 예를..
[21921] 블로그(C++)
문제 찬솔이는 블로그를 시작한 지 벌써 $N$일이 지났다. 요즘 바빠서 관리를 못 했다가 방문 기록을 봤더니 벌써 누적 방문 수가 6만을 넘었다. 찬솔이는 $X$일 동안 가장 많이 들어온 방문자 수와 그 기간들을 알고 싶다. 찬솔이를 대신해서 $X$일 동안 가장 많이 들어온 방문자 수와 기간이 몇 개 있는지 구해주자. 입력 첫째 줄에 블로그를 시작하고 지난 일수 $N$와 $X$가 공백으로 구분되어 주어진다. 둘째 줄에는 블로그 시작 $1$일차부터 $N$일차까지 하루 방문자 수가 공백으로 구분되어 주어진다. 출력 첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출..