전체 글

전체 글

    [초록스터디] Spring MVC 회고

    이번 Spring MVC 미션을 수행하면서 생각했던 점들을 적어볼까 한다.2단계1. 날짜 포맷은 어떻게 써야하는가?이번 문제에서 날짜와 시간을 저장하는 필드가 존재했다.- Java 8 이전에는 Data를 이용하여 날짜를 저장하였지만, Java 8 이후부턴 LocalDate, LocalTime, LocalDateTime을 이용- 날짜 포맷을 맞추기 위해 Reservation에서 @DataTimeFormat을 이용하여 포맷을 정했다.@DateTimeFormat(pattern = "yyyy-MM-dd")private LocalDate date;@DateTimeFormat(pattern = "HH:mm")private LocalTime time; Q. 날짜 타입 객체는 어떻게 만들지?처음에 당연히 이게 정상적으..

    [Java] 일급 컬렉션을 왜 사용할까?

    Collection을 Wrapping 하면서, 그 외 다른 멤버 변수가 없는 상태 이번 로또 문제를 풀면서 맞이했던 문제들을 살펴보자. 1.  Validation 처리LottoNumber는 List numbers를 wrapping하는 일급 컬렉션이다.numbers는 6개의 중복되지 않는 숫자만 포함해야 한다. 일급 컬렉션의 개념을 이해하기 전엔, "입력 시 Validation 처리해야 하는가?" 라는 고민을 했다. View 차원에서 "입력받는 값에 최소한의 유효성 검증을 진행한다." 의 규칙이 존재하기 때문에 상관이 없을 것이라 생각했다.MVC Pattern에서의 유효성 검사 (velog.io) MVC Pattern에서의 유효성 검사책임 전가 패스velog.io 그런데 조사를 더 해보니 일급 컬렉션은 이..

    BOJ 18291 - 비요뜨의 징검다리 건너기

    18291번: 비요뜨의 징검다리 건너기 (acmicpc.net) 접근 방법도저히 감이 안잡혀서 점근식으로 접근해보았다. N=3 인 경우21 1 N=4 인 경우32 11 21 1 1 N=5 인 경우4 3 1 1 3 2 1 1 1 2 1 1 1 2 2 2 1 1 1 1 2 -> 4 -> 8 -> ...2의 제곱 형태로 나아간다고 생각하여2의 N-2 승을 이용하니 맞았다. 더 자세한 설명은 아래 참고 블로그를 확인해보자.  코드#include #include #include #define ll long longusing namespace std;ll t, n;ll mod = 1000000007;void powFunc(ll a, ll b) { ll res = 1; while(b) { if (b % 2 != 0..

    [수학] 분할정복을 이용한 거듭제곱

    수학적 정의를 이용하여 거듭제곱을 하는 방법이다.기존 거듭제곱의 경우, 모두 곱하기 때문에 O(N)의 시간이 걸리지만,분할정복을 이용하면 O(LogN)에 결과 도출이 가능하다. 그냥 단순하게 2, 3등분하여 한방에 구한다는 뜻이다. 재귀함수와 반복문 두 가지 방법으로 구현이 가능하다. 반복문의 경우 코드를 먼저 보자.void powFunc(int a, int b) { int res = 1; while(b) { if (b % 2 != 0) { res *= a; } a *= a; b /= 2; } cout - 2, 3 등분으로 나누기 위해 b가 1이상일 동안 이루어진다.- 만약 홀수인 경우, (위 식 그림에서) 마지막에 C가 추가적으로 곱해지기 때문에, 초기에 곱한다.- 짝수의 경우, 마지..

    MVC 패턴 정의 및 규칙

    기본 정의관심사에 따라 비즈니스 로직과 화면을 분리 모델 : 데이터와 비즈니스 로직 관리뷰 : 레이아웃과 화면 처리컨트롤러 : 모델과 뷰로 명령 전달 사용 이유1. 관심사 분리2. 각자의 역할이 구분되어 있어 서로간의 결합도를 낮출 수 있음3. 분리되어 있기에 코드의 재사용성 및 확장성 높음4. 변경 필요 부분 쉽게 파악 가능하여 유지보수 및 테스트 용이5. 협업 시, 커뮤니케이션 효율성 높음 -> 코드 충돌 방지 가능 한계점- Model과 View의 의존성 완전 분리 힘    - 하나의 컨트롤러에 여러 개의 Model과 View가 엉키게 되어 의존성이 커- 컨트롤러의 부담이 커짐 (Massive-View-Controller 현상) 모델SW, APP에서 정보 및 데이터 부분Controller에게 받은 데..

    BOJ 3109 - 빵집

    3109번: 빵집 (acmicpc.net) 접근방법이번 문제는 그래프 탐색을 통해 오른쪽, 오른쪽 대각 위, 오른쪽 대각 아래 이렇게 총 3가지로 이동하며 마지막 열에 도달하는 문제이다.이 과정에서 발생하는 문제는 다음과 같다. 1. 어떻게 하야 가장 많은 파이프가 지나갈 수 있도록 배치할 수 있을까?2. 도착점까지 연결하는 파이프는  하나여야 한다. 먼저 1번부터 해결해보자.예제 1번을 보자 5 5.xx....x..........x....x. 여기서 0,0 에서 출발한 파이프 라인은 최대한 위쪽을 붙어서 이동해야 한다. 5 51xx.1.1x1...1.....x....x.이런게 1의 경로를 따라 이동해야 하므로, 움직이는 순서는 -1, 0 ,1 이어야 한다. (중요) 이제 2번째 문제인 "도착점까지 연결..

    BOJ 2531 - 회전 초밥

    2531번: 회전 초밥 (acmicpc.net) 접근 방법초밥을 연속 K를 먹었을 때, 먹을 수 있는 가장 많은 가짓 수를 선택하는 문제이다.이 문제에서 주의 깊게 봐야할 것이 쿠폰이다. 처음에 쿠폰이 해당 쿠폰의 초밥을 먹을 때, 추가로 1개를 더 먹는 거라고 착각했다.그러나 이 문제에서 " 만약 이 번호에 적혀진 초밥이 현재 벨트 위에 없을 경우, 요리사가 새로 만들어 손님에게 제공한다." 를 고려하지 않은 문제풀이이다. 따라서, 해당 쿠폰의 초밥을 안 먹은 경우 가지 수를 1가지 추가하고 슬라이딩 윈도우를 하면 된다. 코드#include #include #include #define ll long longusing namespace std;int n, d, k, c;vector v;int selec..

    BOJ 2473 - 세 용액

    2473번: 세 용액 (acmicpc.net) 2473번: 세 용액첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상www.acmicpc.net 접근 방법용액 문제와 비슷하게 해결 가능한 투 포인터 문제이다.세 용액의 합이 0에 가장 가까운 용액들을 고르는 문제이기 때문에 처음엔 두 개의 용액을 모두 더 한 배열을 이용하여, 나머지 용액을 투포인터로 선정하는 방법을 사용했다.  struct st{ int a; // 용액A int b; // 용액B int sum; // 용액A + 용액B}위 구..

    BOJ 1644 - 소수의 연속합

    1644번: 소수의 연속합 (acmicpc.net) 접근 방법 투 포인터와 소수판별 알고리즘이 혼합된 문제이다. 소수 판별을 하기 위해 에라스토테네스의 체를 이용하여 소수를 배열에 저장한다. 해당 소수 배열을 투포인트를 돌면서 각 연속적인 수들의 합이 N이 될 때, 경우의 수를 + 1한다. 코드 #include #include #include using namespace std; #define MAX 4000001 #define ll long long bool chk[MAX+3]; vector arr; ll n, s; void func() { chk[1] = true; for (int i = 2; i < MAX; i++) { if(!chk[i]) arr.push_back(i); for (int j = i..

    BOJ 1806 - 부분합

    1806번: 부분합 (acmicpc.net) 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 접근 방법 연속된 수들 중 합이 S 이상인 것들의 길이가 최소인 것을 구하는 문제이다. 전형적인 투포인터 유형의 문제로 쉽게 해결 할 수 있다. 문제에서 주의할 점이 S이상 이기 때문에 이 또한 고려해야 한다. 또한, 수의 범위가 꽤 크기 때문에 자료형 선정 시도 고려해야 한다. #include #include #include using namespace std; #define MAX 100001 #de..