분류 전체보기 39

DTO와 VO에 관하여

프리코스 1주차 과정중, MVC를 적용하는 과정에서 DTO와 VO에 대해 알게 되었다. 둘다 얼핏보면 기능이 비슷해 보였고 차이점도 모호해서 매번 헷갈려 하는 자신을 발견하였다. 그래서 이번 기회에 DTO와 VO에 대해 간단하게나마 작성해보려고 한다. DTO? VO? 그게 뭔데? DTO는 Data Transfer Object를 줄인말로 말그래도 데이터를 옮기는 객체라는 뜻이다. 말 그대로 Data를 옮기는것에 주 목적을 가진다. VO는 Value Object를 줄인말로 값을 표현하는 객체라는 뜻을 가진다. 말 그대로 클래스의 상태값을 표현하는 객체라고 볼수 있겠다. 미리 보기 편하게 표로 정리 DTO(Data Tranfer Obejct) VO(Value Object) 기능 레이어(Layer)간의 데이터를..

객체지향 생활체조 원칙

우테코 프리코스에 참가하고 디스코드에서 여러 참가자들이 공유해주는 것들중에 [객체지향 생활체조 원칙]이라는 말을 처음 들어봤다. 몇몇 사람들은 이미 알고 있었는지 이에 대해 심도깊은 이야기를 하는것을 보았다. 이에 대해 몰랐던 나는 이 정보를 목록을 보기 시작했다. '한 메서드에 들여쓰기는 한단계만.. else를 쓰지 않는다.. getter를 쓰지말자.. 응..?' 뭔가 처음보는데 익숙한 느낌이 들었다. 그래서 어디서 봤지 곰곰히 생각해보니 난 이걸 본적이 있다는걸 알게되었다. 바로 작년 우테코 프리코스 미션의 제약조건이었다! 그때는 뭣도 모르고 했었는데 사실 이게 원칙이라는 이름으로 있던거라니.. 이번에는 이 객체지향 생활 체조에 대해 서술해보려고 한다. 그래서 이게 뭔데? 객체지향 생활원칙은 마틴 파..

Indent Depth를 줄여보자!

우테코 프리코스에 참가하면서 많은 참가자들이 객체지향 생활체조 9원칙을 지키려고 노력하는 것을 보았다. (본인 포함) 그중에서 아래 원칙을 지키는것이 생각보다 어려웠다. 한 메서드에서 한 단계 들여쓰기만 사용하자 Use only one level of indentation per method 한단계 들여쓰기는 Indent Depth가 1을 의미하는것이고 이는 코드로 치면 아래와 같이 메소드에 if문 하나를 의미한다. void indentDepth(int n){ //해당 메서드의 indent depth는 1 if(n==1){ return 1; } return 0; } Indent depth를 2까지로 만드는 데에는 생각보다 간단할것이다. 어지간하면 depth가 3이상으로 가는일이 적기때문에. 하지만 2에서..

[백준] 10026번 적록색약

문제 내용 https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net 풀이 과정 -그래프 탐색이라고 판단하여 이를 이용해 문제를 풀이,python의 특성상 BFS를 이용하였음. 풀이중 문제점 1. 코드의 복잡함 문제점 해결 과정 1. 최대한 간략하게 코드를 수정함. 해결 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 3..

[백준] 11279번 최대 힙

문제 내용 https://www.acmicpc.net/problem/11279 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 풀이 과정 -앞선 최소 힙에서 기준만 최대로 바뀐것이기에 PriorityQueue를 이용해서 풀이 풀이중 문제점 -이상 없음 해결 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import sys from queue import PriorityQueue sys_input=sys.stdin.readline n=int(sy..

[백준] 1927번 최소 힙

문제 내용 https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 풀이 과정 1,최초에는 deque를 이용해서 문제를 풀려고 하였지만 시간초과가 발생함. 2.이후 PriorityQueue(우선순위 큐)를 사용하여 문제를 풀어 제한시간 내로 풀이를 함. 풀이중 문제점 1.시간 초과 발생 2.PriorityQueue의 사용법 미숙 문제점 해결 과정 1.최초 풀이에서는 min()과 remove()를 사용해서 문제풀이를 진행하였음. 하지만..

[백준] 11659번 구간 합 구하기 4

문제 내용 https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 풀이 과정 -간단하게 두 범위의 합을 구하는 과정을 반복할시 시간제한에 걸리게됨 -1~i까지의 합을 저장한뒤 범위 사이의 값을 구하기위해 두 값만 참조하는 방식으로 수행함. ex)3~5번까지의 합=>1~5번까지의합-1~2번까지의합 풀이중 문제점 1.시간초과가 발생함. 문제점 해결 과정 1.문제에 기재된 n의 범위를 생각하지 않고 코드를 작성함 => 반복횟수를 줄임..

[백준] 1764번 듣보잡

문제 내용 https://www.acmicpc.net/problem/1764 풀이 과정 -집합(set)과, 정렬을 사용해야 한다고 판단하였음 풀이중 문제점 1.집합의 원활한 사용이 안되었음 문제점 해결 과정 1.집합에 대해 학습을 진행한후 풀이 진행. => 차후 집합(set)관련 포스트 작성으로 학습 예정 해결 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import sys sys_input=sys.stdin.readline n,m=map(int,sys_input().rstrip().split()) #각 입력값을 집합에 넣어줌 a=set([sys_input().rstrip() for _ in range(n)]) b=set([sys_input().rstrip() f..

[백준] 1541번 잃어버린 괄호

문제 내용 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 풀이 과정 -그리디 알고리즘 같다고 판단하였음 1.뺄셈(-) 기호를 기준으로 값이 최소가 되려면 좌항은 최소 우항은 최대가 되어야한다. 2.뺄셈 기호를 기준으로 나눠서 좌항을 최소로 만들어준다면 전체 식은 최소가 된다고 판단하였다. 풀이중 문제점 -이상 없음. 문제점 해결 과정 -이상 없음. 해결 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 impor..

[백준] 2805번 나무 자르기

문제 내용 https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 풀이 과정 -이분탐색으로 판단하고 문제풀이를 진행함. 풀이중 문제점 1.이분탐색 종료지점에 대한 불확실함. 문제점 해결 과정 1.start값의 변경을 통해 반복문을 탈출하였음. 해결 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import sys sys_input=sys..