
문제 지민이는 항구에서 일한다. 그리고 화물을 배에 실어야 한다. 모든 화물은 박스에 안에 넣어져 있다. 항구에는 크레인이 N대 있고, 1분에 박스를 하나씩 배에 실을 수 있다. 모든 크레인은 동시에 움직인다. 각 크레인은 무게 제한이 있다. 이 무게 제한보다 무거운 박스는 크레인으로 움직일 수 없다. 모든 박스를 배로 옮기는데 드는 시간의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보다 작거나 같은 자연수이다. 넷째 줄에는 각 박스의 무게가 주어진다. 이 값도 1,000,000보다 작거나 ..

문제 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모든 나라는 1×1 크기이기 때문에, 모든 국경선은 정사각형 형태이다. 오늘부터 인구 이동이 시작되는 날이다. 인구 이동은 하루 동안 다음과 같이 진행되고, 더 이상 아래 방법에 의해 인구 이동이 없을 때까지 지속된다. 국경선을 공유하는 두 나라의 인구 차이가 L명 이상, R명 이하라면, 두 나라가 공유하는 국경선을 오늘 하루 동안 연다. 위의 조건에 의해 열어야하는 국경선이 모두 열렸다면, 인구 이동을 시작한다. 국경선이 열려있어 인접한 칸만을 이용해 이동할 수 있으면, 그 나라를 오늘 하루 동안은..

소프트웨어 프로세스 모델이란 소프트웨어 프로세스 이전 포스트에서도 다루었지만 다시 이야기를 하자면, 소프트웨어 프로세스는 소프트웨어 시스템을 개발하기 위해 필요한 구조화된 활동들의 집합이다. 여러가지 종류의 소프트웨어 프로세스가 있지만 모두 아래의 요소들을 포함하고 있다. Specification Design and Implementation (Development) Validation (Testing) Evolution (Maintenance) 소프트웨어 프로세스 모델 소프트웨어 프로세스 모델은 어떤 프로세스의 대표적인 형태라고 할 수 있다. Plan-driven processes VS Agile processes 프로세스 모델에는 크게 두가지 형태가 존재한다. 하나는 Plan-driven, 다른 하나..

개론 기하와 벡터, 행렬 식과 같은 수학이 아닌 중학생때 배웠던 기초적인 수학에 관한 알고리즘에 대한 설명이다. 정수론의 내용도 포함되어있다. (몇가지는 중학생때 제목만 들었던 거고 자세하게 배우지 않았던 것일 수도 있다.) 나머지 연산 모듈러 연산이라고도 하고 나머지 연산에 관한 다른 공식들이나 정리들은 이산수학에서 배울 수 있다. 더 자세한 것은 이산수학에서 모듈러 연산에 대해서 보기로 하고 이 글에서는 나머지 연산에 대한 간단하고 응용하기 좋은 공식 몇가지를 볼 것이다. 나머지 연산의 경우 답이 매우 커질 때, 어떤 수로 나눈 나머지를 답으로 요구하기도 한다. 그 외에도 원 순환을 구현할 때도 사용한다. 나머지 연산은 우리가 따로 나누고, 빼고 할 필요 없이 나머지 연산자라는 것이 있어 바로 구하는..

소프트웨어란? 소프트웨어라는 말을 들으면 처음 드는 생각은 작성한 코드, 컴파일한 바이너리 코드, exe 파일, app 등등을 먼저 생각하곤 한다. 그것들도 소프트웨어이긴 하나 그것만이 소프트웨어인 것은 아니다. 조금 더 넓은 의미로 아래의 것들도 소프트웨어로 볼 수 있다. Computer Programs 우리가 보통 생각하는 프로그램들이다. 작성한 코드, 컴파일한 바이너리 코드, exe 파일, app 등등이 있다. Configuration Files Configuration file은 코드에는 포함되지 않지만 프로그램을 구동할 때 필요로 하는 파일을 말한다. OS의 경우에는 OS가 구동될 때 사용하기 위해 따로 파일로 설정해놓은 값들이 Configuration File이라고 할 수 있다. System ..

시간 복잡도 Big - O 표기법 주어진 Input의 개수를 의미하는 n을 기반으로 명령어들의 연산이 몇 번이나 실행됐는지를 숫자로 표시하는 것이다. Big - O : function ranking Better O(1) - 상수 시간 : 문제를 해결하는데 오직 한 단계만 처리함. O(log(n)) - 로그 시간 : 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 따라 줄어듬. O(n) - 직선적 시간 : 문제를 해결하기 위한 단계의 수와 입력 값 n이 1 : 1 관계를 가짐. O(nlog(n)) - 로그 직선적 시간 : 문제를 해결하기 위한 단계의 수가 n*log(n)번 만큼의 수행시간을 가짐 O(n^2) - 2차 시간 : 문제를 해결하기 위한 단계의 수는 입력 값 n의 제곱. O(n^3) - 3..
![[Flutter] 위젯을 메소드로 쪼개는 것이 왜 안좋은가?](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDsgtz%2FbtsDEk0qjZD%2F41uKrk12tNEWB2NzkHAkGK%2Fimg.png)
보일러플레이트 코드를 피하자 보일러 플레이트 Flutter로 코드를 짜다보면 반복적인 코드가 등장하게 된다. 이런 반복적인 코드를 프로그래머들은 보일러플레이트 코드라고 부른다. 보일러플레이트 코드? 보일러 플레이트(Boilerplate)는 신문사업에서 납 대신 강철로 인쇄물을 찍기 시작하면서 나온 그 강철을 말한다. 보일러 플레이트 코드는 최소한의 변경으로 여러 곳에서 재사용 되며, 반복되는 형태를 띄는 코드를 말한다. 역사적으로 이런 반복되는 코드를 피하기 위해 함수란 개념이 나왔는데, 이 함수 조차도 반복될 수 있다는 것이다. 보일러플레이트 코드는 없어져야 한다 최소한의 변경으로 반복되는 코드는 실용적이지도 않고, 코드의 길이는 길어지며, 길어진 코드는 가독성을 해치게 된다. 개발자는 이런 상황을 막..
![[Flutter] Stateless & Stateful 알아보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZTxs1%2FbtsDAv9Sx3l%2FeCZNiD821KYYnWKkWeb4Zk%2Fimg.png)
개요 Flutter 앱 개발 학습 초기에 위젯들을 넣는 방법을 배우다 보면 위젯들의 이름이 전부 StatelessWidget임을 알 수 있다. 그렇다면 StatefulWidget은 무엇이고 언제 쓰는걸까? 이제부터 StatefulWidget의 존재와 그 사용 방법에 대해서 알아보자. Imperative UI (명령형) vs Declarative UI (선언형) 가장 먼저 Flutter의 UI 구성 방식에 대해서 알아보자. UI를 짜는 방식으로는 두 가지 방식이 있다. 전통적으로 사용되어온 Imperative UI(명령형 UI)가 있고, 최근 들어 새롭게 등장한 Declarative UI(선언형 UI)로 만드는 방식이 있다. Imperative UI (명령형 UI) 란? 전통적인 방식이라고 부를 수 있는 ..

소프트웨어 공학의 목적 소프트웨어 공학의 목적은 질 좋은 소프트웨어를 만드는 것이다. 하지만 목적만 있으면 결코 그 목적에 도달할 수 없다. 목적에 도달하는 과정인 ‘어떻게’, 'How'가 중요하다. 코드는 남이 보기 쉬워야한다. 재검토하지 않은 코드가 일으킨 나비효과 우리가 코드를 작성할 때를 생각해보자. 코드가 한 번 제대로 돌아간 이후, 그 코드를 유심히 본 적이 있거나 유지보수를 한 적이 있었을까? 굉장히 부끄럽게도 나는 코드를 재 검토한 횟수가 굉장히 적었다. 코드를 다시 보지 않는다는 것은 복습을 제대로 하지 않는다는 것이다. 그렇다면 지금 하고자 하는 이야기는 복습을 제대로 하라는 것일까? 그건 아니다. 코드를 재검토하지 않는 것은 복습의 문제보다 더 중요한 문제를 일으킨다. 남들이 봤을 때..
![[Flutter] Flutter 위젯 디자인에 관하여](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoEI6N%2FbtsDBBA2rN1%2Fx2WWZQlET3hvbTwo7551e1%2Fimg.png)
Flutter 위젯 디자인 개요 Flutter를 세팅하고 flutter 프로젝트를 만들었다면, 이제 위젯을 디자인하는 방법에 대해서 알아보자. Flutter의 특징을 하나씩 알아가며 어떤 식으로 앱을 디자인하게 되는지 학습한다. 위젯 Flutter에서 앱을 디자인할 때는 위젯을 생각하면 된다. 아래의 사진은 iOS와 Android OS의 위젯화면이다. ▼ Flutter에서 앱을 디자인 하는 방법은 쉽게 말해 위젯을 짜깁기 하는 것이다. Flutter는 선언형 UI를 채택하고 있기 때문에 각종 UI들이 위젯의 형태로 미리 구현이 되어있다. 글자를 넣고 싶다면 글자 위젯, 박스를 넣고 싶다면 박스 위젯을 넣는 식으로 디자인을 한다.▼ 위젯 내부에 위젯을 넣는 식으로 짜깁기 한다. 위젯 트리 그렇다면 이 위젯..