zbqmgldjfh의 등록된 링크

 zbqmgldjfh로 등록된 네이버 블로그 포스트 수는 518건입니다.

[JPA] 객체지향 쿼리 언어 1 (기본 문법) [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 10. 객체지향 쿼리 언어 1 (기본 문법) 1. 소개 JPQL 소개 가장 단순한 조회 방법은 다음과 같다. 또는 객체 그래프 탐색을 하면서 조회할수도 있다. => a.getB().getC() 만약 나이가 18살 이상인 회원을 모두 검색하고 싶다면? 특정 조건을 기준으로 검색을 하고싶다면 어떻게 해야할까? JPQL 필요성 JPA를 사용하면 엔티티 객체를 중심으로 개발할수 있다. 문제는 검색 쿼리이다! 애당초 모든 DB데이터를 객체로 변환해서 검색하는 것은 불가능하다. 검색을 할 때도 테이블이 아닌 엔티티 객체를 대.......

[JPA] 객체지향 쿼리 언어 2 (기본 문법) [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 11. 객체지향 쿼리 언어 2 (기본문법) 5. 조인 내부 조인 외부 조인 세타 조인 (설명에서 세타 조인의 의미가 내가 알던것과 달라 질문글을 찾아봤는데, 다음과 같이 설명해 주셨다. => 세타조인은 동등조인이면서 동시에 sql에서 join구문 없이 사용하는 것으로 이해하시면됩니다. 내 의견을 좀 추가하면 카티션 곱한 결과 릴레이션에다가 =(동등조건) 을 추가해준 것 같다?) 예시 코드를 하나 살펴보자. 실행 결과는 다음과 같다. 첫 JOIN문이 나오는것은 이해할수가 있다. 하지만 2번째 sel.......

[JPA] 객체지향 쿼리 언어 3 (중급 문법) [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 12. 객체지향 쿼리 언어 3 (중급 문법) 1. 경로 표현식 경로 표현식 이란? => .(점) 을 찍어 객체 그래프를 탐색하는 방법을 말한다. 경로 표현식 용어 정리 1. 상태 필드 : 단순히 값을 저장하기 위한 필드 (ex. m.username) 2. 연관 필드 : 연관관계를 위한 필드 - 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티 (m.team) - 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션 (m.orders) 경로 표현식 특징 1. 상태 필드: 경로 탐색의 끝이다. 더이상 탐색이 불가능하다. 2.......

[백준][C++] 2666번: 벽장문의 이동 <173> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 가장 먼저 DP 배열의 의미를 정하려 노력하였다. 우선 반복적으로 변경되는 2개의 변수가 열려있는 문의 번호 이니까, 처음에는 DP[i][j]를 생각했었다. 하지만 이 경우 열려있는 문에대한 정보는 저장할수가 있지만, 벽장의 순서 정보를 처리할수가 없었다. 따라서 DP[a][b][c]로 잡았으며 : a번째 순서를 열어야 하는데, 지금 b, c번이 열려있는 상황이라 정의하였다. 주어진 문제의 예시는 다음과 같다. 방문을 3, 1, 6, 5 순으로 방문해야 하며, 2번, 5번 문이 열려있다. 따라서 시작은 go(1, 2, 5) 로 시작하게 된다. 1번 순서는 3번 벽.......

[JPA] 객체지향 쿼리 언어 4 (중급 문법) [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 13. 객체지향 쿼리 언어 4 (중급 문법) 4. 다형성 쿼리 TYPE - 조회 대상을 특정 자식으로 한정한다. 예를 들면, Item 중 Book, Movie를 조회해라 와 같은 JPQL은 다음과 같다. TREAT (JPA2.1) - 자바에서의 다운캐스팅과 유사하다. - 상속 구조에서 부모타임을 특정 자식 타입으로 다루기 위해 사용한다. - FROM, WHERE, SELECT 절에 사용가능 예를 들면, Item을 select하고 싶은데, Item의 저자정보를 이용하고 싶다. 하지만 Item에는 저자 필드가 없다. 자식인 Book에 가야 저자 필드가 있다. 5. 엔티티 직.......

[백준][C++] 1052번: 물병 <174> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 문제를 처음 읽고 든 생각은 2^N승으로 나누면 나머지가 0이여야 추가적인 물병 구매가 없겠다는 생각이 들었다. (사실 맨처음에는 2의 배수 이면 될거라 생각했는데, 10과 같은 경우를 생각해 보니 아니더라) 어떠한 수 N을 만들려면 N/2, N/2 이렇게 2개가 필요하고, N/2, N/2 2개를 만들려면 N/4 가 4개가 필요하고... 즉 2의 N승 단위는 추가적인 물병 구매가 필요가 없다. 이후 완전탐색으로 추가물병 변수 bottle을 0부터 1, 2, 3, ... 쭉 증가시켜 가면서 확인해줄 것 이다. 이때 매번 2로 나눠서 나머지가 있다면 count를 하나 추가.......

[백준][C++] 1339번: 단어수학 <175> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 나의 풀이와 다른 분의 풀이를 모두 설명해보겠다. 1) 나의 풀이 나는 그리디 적으로 생각하지 못해 노가다로 순열 구하면서 다 계산해보는 방식을 택하였다. 알파벳 최대 길이가 10자리니까, 최대 10! 가지의 경우가 만들어 질수가 있다. 입력으로 받을때 문자를 모두 vector에 저장한 후, 중복 제거를 하여 사용된 문자들을 확인한다. 이후 이 문자들에 순열을 사용하여 값을 할당해 준다. 이렇게 문자열에 값이 할당되면 결과값을 계산하여 최대값을 찾으면 된다. 내 컴 기준으로는 7초나 걸렸기때문에... 백준으로 제출하면 정답처.......

[JPA] 고급 매핑 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 5. 고급 매핑 1. 상속관계 매핑 관계형 데이터베이스 같은 경우 상속 관계가 없다. 대신 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사한 방식이다. 상속관계 매핑 : 객체의 상속 구조를 DB에서의 슈퍼타입, 서브타임 관계 매핑으로 해결한다. 위 그림에서 왼쪽과 같은 논리 모델을, 오른쪽과 같은 실제 물리 모델로 구현하는 방법에는 3가지가 있다. 1) 조인 전략 (각각 테이블로 변환) 2) 단일 테이블 전략 (통합 테이블로 변환) 3) 구현 클래스마다 테이블 전략 (서브타입 테이블로 변환) 다음과 같.......

[백준][C++] 17140번: 이차원 배열과 연산 <171> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 구현은 구현인데, DFS, BFS류가 아닌 구현문제는 간만에 풀어보는것 같다. 가장 핵심이 되는 find() 에 대하여 알아보자. 함수의 전체적인 틀은 다음과 같다. 첫 시작은 3x3에서 시작한다. while문을 돌면서 MAP[r][c]에 K가 있으면 while문을 종료하게 된다. 연산의 경우를 살펴보자. R연산부터 살펴보자! 예를 들어 input이 다음과 같다고 해보자. 이중 첫 행 1, 2, 1을 돌면서 counter로 개수를 파악한다. counter[1] = 2, counter[2] = 1이 되게 된다. 이렇게 파악한 개수를 vector에 추가해 주어야 한다. pair{}를 이용하여.......

[JPA] 프록시와 연관관계 관리 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 6. 프록시와 연관관계 관리 1. 프록시 한가지 의문을 가져보자. Team이라는 필드를 갖고있는 Member를 조회할때 Team도 한번에 함께 조회되어야 할까? 예를 들어 다음과 같은 코드가 있다고 해보자. 위와같은 코드는 entityManager에서 member를 찾아올때 member에 대한 정보와, team에 대한 정보를 한번에 가져오면 좋을것이다. 하지만 다음과 같은 경우는 어떨까? Team에 대한 정보는 필요가 없는 상황이다. 이럴때까지 Team에 대한 정보를 한번에 가져오는것을 비효율적이지 않은가? JPA는 이를 프록시, 지연로딩.......

[JPA] 영속성 전이와 고아 객체 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 7. 영속성 전이(CASCADE)와 고아 객체 1. 영속성 전이 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고 싶다면? 예를 들어 부모 엔티티를 저장하면 자식 엔티티도 함께 저장되도록 말이다! 우선 영속성 전이가 안되는 기본적인 엔티티의 저장방법부터 알아보자. - parent, child Parent 객체 1개와, child 객체 2개를 만들어 parent에 2개의 child를 등록하자. 위와같이 persist를 3번이나 호출하면서 등록하는 코드는 매우 불편하다. 이를 영속성 전이를 통해 해결해 보자. => p.......

[JPA] 값 타입 - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 8. 값 타입 - 1 1. 기본값 타입 기본값 타입은 크게 2가지로 분류 가능하다. (엔티티 타입, 값 타입) 1. 엔티티 타입 - @Entity로 정의하는 객체이다. - 데이터가 변해도 식별자로 지속적인 추적이 가능하다. => 예를 들어 회원 엔티티의 키나 나이값 을 변경해도 식별자로 인식 가능하다. 2. 값 타입 - int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 => 예를 들어 숫자 100을 200으로 변경하면 완전히 다른 값으로 대.......

[JPA] 값 타입 - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 9. 값 타입 - 2 4. 값 타입의 비교 인스턴스가 달라도 그 안에 값이 같으면 같은것으로 봐야한다. 임베디드 타입을 '==' 연산자로 비교할 경우 당연히 false나 나온다. 왜냐하면 임베디드 타입은 참조객체이기 때문이다. a와 b는 서로다른 참조값을 갖고있는 서로다른 객체이기 때문이다. 그럼 비교연산을 어떻게 해야할까? - 동등성(identity) 비교 : 인스턴스의 참조 값을 비교, == 사용 - 동등성(equivalence) 비교 : 인스턴스의 값을 비교, equals() 사용 => 값 타입은 a........

[백준][C++] 16988번: Baaaaaaaaaduk2 (Easy) <172> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 뭘 해야할까? 어떤 과정을 거처야 이 문제를 해결할수 있을까? 생각해보면 2가지 과정을 거처야 함을 알수있다. 1) 1번돌 2개를 두기 2) 점수 계산하기 이를 설명해 보겠다. 1번 돌을 2개를 두는 방식은 vector를 이용하였다. 다음 코드를 보자. 맨 처음 입력을 받을때 0번 위치를 전부 vector에 받았다. 이후 2곳을 선택하면서 mapChecker() 메서드를 통해 값은 계산하면 된다. 문제는 2번 과정인 점수 계산하기 이다. 1번 돌 2개를 논 MAP상에서 어떤 방법을 써야 점수를 계산할수가 있을까? - 점수 계산하기 나는 BFS를 이용하기로 했다.......

[백준][C++] 2157번: 여행 <169> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 DP문제인것을 인식은 바로 된다. 나같은 경우 DP를 대부분 Bottom-up으로 해결하기 때문에 바텀업 방식으로 해결하였다. DP[N][M]은 N번째 도시를 방문하는데 M개의 도시를 지나왔다는 의미이다. 우선 문제에서 1번 도시에서 시작하여 N번 도시에서 끝나야 한다는 조건이 있다. 따라서 다음과 같이 1번 도시를 기준으로 1번과 연결된 곳들의 DP값을 변경해 준다. 이후 다시 1번부터 N번까지 확인하면서 DP값이 0이 아닌 지점(1로부터 시작한 지점)들의 연결된 next지점을 확인하면서 next지점의 DP값을 갱신한다. 이렇게 총 M번 안에 도.......

[JPA] 엔티티 매핑 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 2. 엔티티 매핑 1. 객체와 테이블 매핑 @Entity 1. @Entity가 붙은 클래스를 엔티티 라고 하며, JPA가 관리한다. 2. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. 3. 주의사항 - 기본 생성자 필수(파라미터가 없는 public or protected) - final 클래스, enum, interface inner 클래스 사용 x - 저장할 필드에 final 사용 X 4. 속성 정리 - name 속성 JPA에서 사용할 엔티티의 이름을 지정할수가 있다. 만약 name 속성을 지정하지 않는다면, Class 이름을 기본으로 사용한다. 일반적으로 거의 기.......

[CODE SQUAD] 코드스쿼드 2022 마스터 코즈 합격 [내부링크]

1. 지원 동기 나 같은 경우 독학으로 나름? 좀 오래 프로그래밍을 해왔다. (다전공하고 휴학해서 아직 학교에서 컴공 전공과목은 2개만 들어봤다) 독학으로 하는 동안 다행히 공부가 지겹지는 않았다. 약 1년 6개월 정도 독학으로 했는데, 공부하는 동안 항상 즐겁게 공부했다. 사실 "단순 지식" 자체를 축적해 가는데 부족함은 없었다. 인터넷에는 좋은 강의들도 많았고, 읽어야 할 좋은 책들도 산더미 같으니... 공부할 자료가 부족하단 생각은 안 했다. 그동안 여러 가지를 공부했는데 C, C++, 알고리즘, 백준 문제풀이, Java, 디자인 패턴, Spring처럼 꾸준하고, 깊게 공부하는 내용들도 있었고 네트워크, 데이터베이스, SQL, 서.......

[JPA] 연관관계 매핑 기초 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 3. 연관관계 매핑 기초 1. 단방향 연관관계 우리는 객체와 테이블 연관관계의 차이를 이해해야 합니다. 객체지향의 페러다임과 RDB의 페러다임 간의 간극에서 오는 차이가 있으며 이를 인지하고 공부해야 합니다. 1. 연관관계의 필요성 객체지향 설계의 목표는 자율적인 객체들의 협력 공통체를 만드는 것이다. (조영호) 2. 객체를 테이블에 맞춰 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. 객체를 테이블에 맞춰 모델링 하기 (연관관계가 없는 객체) 우선 모델링할 다이어 그램을 살펴보자. MEMBER .......

[JPA] 다양한 연관관계 매핑 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 4. 다양한 연관관계 매핑 0. 연관관계 매핑시 고려할점 3가지 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany => 다대다는 실무에서 사용하면 안된다. 단방향, 양방향 - 테이블 외래키 하나로 양쪽 Join 가능하다. 사실상 방향이라는 개념이 없다. - 객체 참조용 필드가 있는 쪽에서 참조 대상으로만 참조가 가능하다. 한 쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향 이다. 연관관계의 주인 테이블은 외래 키(FK) 하나로 두 테이블의 연관관계를 맺.......

[백준][C++] 17088번: 등차수열 변환 <170> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 맨 처음 생각한 방식은 +1, 0, -1 을 모든 수마다 적용해 보면서 경우를 따지는 방법이였다. 하지만 수열의 크기가 최대 10만 까지 가능하기 때문에 위와 같은 방식은 3^10만 이라 시간안에 해결 불가능 했다. 생각해보면 등차수열의 차이는 1번째수 와 2번째수 를 확인하면 구할수가 있다. 이렇게 구한 수열의 차이 diff를 3번째 수부터 ~ N번째 수까지 돌면서 확인하면 된다. 2번째수 + diff 가 3번째 수가 맞는지? 2번째수 + diff + diff 가 4번째 수가 맞는지? 2번째수 + diff + diff + diff 가 5번째 수가 맞는지? ... 이렇게 N번째 수.......

[Spring] 스프링 타입 컨버터 - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 25. 타입 컨버터 - 1 1. 스프링 타입 컨버터 소개 다음과 같은 컨트롤러가 하나 있다고 하자! HTTP 요청 파라미터는 모두 문자로 처리된다. 따라서 요청 파라미터를 자바에서 다른 타입으로 변환해서 사용하고 싶으면 다음과 같이 숫자 타입으로 변환하는 과정을 거쳐야 한다. 위 코드에서도 다음과 같이 String -> Integer로 타입을 변환하여 사용하고 있다. 스프링의 타입 변환 스프링을 사용하면 @RequstParam, @ModelAttribute , @PathVariable 에서도 타입 컨버팅을 확인할 수 있다. 예를 들어 쿼리 스트.......

[Spring] 스프링 타입 컨버터 - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 26. 타입 컨버터 - 2 6. 포맷터 - Formatter 개발자 입장에서는 문자를 다른 타입으로 변환하거나, 다른 타입을 문자로 변환하는 상황이 대부분이다. 화면에 숫자를 출력해야 하는데, Integer => String 출력 시점에 숫자 1000 문자 "1,000" 이렇게 1000 단위에 쉼표를 넣어서 출력하거나, 또는 "1,000" 라는 문자를 1000 이라는 숫자로 변경해야 한다. 이렇게 객체를 특정한 포멧에 맞추어 문자로 출력하거나 또는 그 반대의 역할을 하는 것에 특화된 기능이 바로 포맷터( Formatter )이.......

[백준][C++] 1405번: 미친 로봇 <166> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 스페셜 저지라 뭔가 더 꼬아서 생각하고 있었던것 같다. 그냥 문제에서 원하는데로 DFS를 돌면서 방향으로 진행할때 마다 확률만 추가로 곱해주면 되는 문제였다. 문제에서 최대 N은 14까지 가능하다 했으니 한방향으로만 14번 이동하는 경우도 가능하다. 따라서 배열의 크기를 14의 2배, 약 30으로 크기를 잡아주었다. 이후 중심인 {15, 15} 에서부터 DFS를 돌면서 모든 확률을 구하여 더하면 결과가 나온다. 나의 코드

[Spring] 파일 업로드 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 27. 파일 업로드 1. 파일 업로드 소개 기존의 HTML에서 form을 통해 데이터를 서버로 전달하던 방식은 Content-Type: application/x-www-form-urlencoded의 방식이다. 이 방식은 가장 기본적인 방법이기에, Form 태그에 별도의 enctype 옵션이 없으면 기본으로 사용한다. 또한 HTTP Body에 username=kim&age=20 와 같이 & 로 구분해서 전송한다. 하지만 파일을 업로드 하려면 파일은 문자가 아니기 때문에 바이너리 데이터를 전송해야 한다. 따라서 문자를 전송하는 방식으로는 파일을 전송하기 가.......

[백준][C++] 17471번: 게리맨더링 <167> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 각 지역을 2개의 선거구 중 하나로 나누기 위해 조합을 사용하였다. DFS() 방식으로 돌면서 해당 지역에서 선거구 하나를 택하게 구현하였다. 이렇게 team을 정해가다가, N개의 팀이 다 정해졌을때! 선거구가 2개로 잘 나뉘어 졌는지 확인하면 된다. 선거구가 나뉘어 졌는지 확인하는 함수를 isOk()로 따로 구현하였다. 전체 지역을 BFS로 한번씩 방문하는 것 이다. 만약 선거구가 2개로 잘 분리됬다면 BFS는 총 2번만 호출되야 한다. 1) 3번 이상 호출되면 오류 처음 0번 선거구 BFS 때 0번은 전부 방문처리 되고, 그 다음 1번 선거구.......

[백준][C++] 7490번: 0 만들기 <168> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 부호는 총 3개 +, -, 공백 이렇게 3가지가 가능하다. 매 숫자마다 3개중 한가지를 택할수 있으니, 3에 9승 즉, O(39)이 걸리기 때문에 DFS 완전탐색 해야겠다고 생각했다. 문제는... 최종적으로 하나의 string이 만들어 졌을때, 이것을 읽으면서 결과가 0인지를 파악하는 과정이 힘들었다. 예를 들어 다음과 같은 string이 만들어 졌다고 생각해보자. 맨처음 부호는 +로 시작할 것 이다. 그래야 처음 temp에 값을 더할수 있다. 1일때 맨처음 인덱스 0으로 시작하면 1을 가리키게 된다. 이 1을 temp에 더해준다. (부호가 +기 때문) -일때 그.......

[JPA] 영속성 관리 - 내부 동작 방식 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 1. 영속성 관리 - 내부 동장 방식 1. 영속성 컨텍스트 1 엔티티는 테이블과 매핑되는 하나의 클래스이다. 우선 엔티티 메니저 팩토리를 통해 엔티티 매니저를 생성하는 과정을 살펴봅시다. EntityManagerFactory는 어플리케이션 로딩 시점에 딱 하나만 생성되어야 한다. 이후 사용자의 요청이 들어올때마다 EntityManager를 생성하게 됩니다. 고객의 요청이 들어오면 EntityManager를 생성하고, 요청에 의한 쿼리문이 다 작업이 끝나면 다시 close() 하기를 반복합니다. (EntityManager는 Thread 공유를 하면 안됩니.......

[Spring] 예외 처리와 오류 페이지 - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 21. 예외 처리와 오류 페이지 - 1 1. 서블릿 예외 처리 - 시작 서블릿은 2가지 방식으로 예외 처리를 지원해 준다. 1) Exception 2) response.sendError(HTTP 상태 코드, 오류 메시지) 웹 어플리케이션 에서는 사용자 요청별로 thread가 할당된다. 해당 thread에서 예외가 발생했는데, try - catch로 예외를 처리하지 못한다면 어떻게 될까? => 톰캣 같은 WAS 까지 예외가 전달된다. 이를 확인해보기 위해서 컨트롤러를 하나 만들어보자. 기존의 whitelabel.enabled는 false로 변경해야 한다. ServletExCo.......

[백준][C++] 2250번: 트리의 높이와 너비 <165> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 그레프를 어떻게 탐색해야 전체적으로 탐색을 할수있을까? 솔직하게 생각 못해냈다... 생각보다 방법은 간단한 것을... 항상 너무 어렵게 생각하려는 습관을 고쳐야 겠다. 우선 각 Node를 표현할 구조체를 하나 만들었다. 중위순회를 하면 된다. 그럼 간단하게 Node들의 순서를 왼쪽부터 차례로 지정하면서 저장할수가 있다. order는 전역 변수로 0으로 하나 잡아서 사용하였다. 또한 이 문제에서 1번 정점이 root라는 말이 없다. 따라서 처음 정점을 저장할때 이를 기록하여, 마지막에 부모가 없는 노드를 Root로 지정해주어야 한다. 이후.......

[Spring] 예외 처리와 오류 페이지 - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 22. 예외 처리와 오류 페이지 - 2 6. 스프링 부트 - 오류 페이지 1 이전글에서 예외 처리 페이지를 만들기 위해 복잡한 과정을 거쳤다. 1) WebServerCustomizer 를 만들고 2) 예외 종류에 따라서 ErrorPage 객체를 추가하고 3) 예외 처리용 컨트롤러 ErrorPageController를 사용자가 직접 만들었다. 스프링 부트는 이러한 과정을 전부 기본적으로 제공한다. 1) ErrorPage를 자동등록 한다. 이때 경로는 /error 이라는 기본 경로로 오류 페이지를 설정한다. 따라서 서블릿 밖으로 예외가 발생하거나, response.sendErr.......

[Spring] API 예외 처리 - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 23. API 예외 처리 - 1 1. 시작 API의 예외 처리는 기존과 다르다. 이전처럼 단순하게 고객에게 오류 페이지를 보여주는것으로 끝나지 않는다. API 방식은 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. ApiExceptionController - API 예외 컨트롤러 단순한 회원 조회하는 기능의 컨트롤러 이다. id값으로 ex를 넘기면 RuntimeException을 던지도록 구현하였다. 이제 작성한 컨트롤러가 어떻게 동작하는지 Postman으로 테스트 해보자. 정상 호출 http://localhost:8080/ap.......

[Spring] API 예외 처리 - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 24. API 예외 처리 - 2 5. 스프링이 제공하는 ExceptionResolver1 스프링 부트가 기본으로 제공하는 ExceptionResolver 는 다음과 같다. HandlerExceptionResolverComposite 에 다음 순서로 등록되어 있다. 1. ExceptionHandlerExceptionResolver : @ExceptionHandler 를 처리한다. 2. ResponseStatusExceptionResolver : HTTP 상태코드를 지정해줄수 있다. 3. DefaultHandlerExceptionResolver 우선 순위가 가장 낮다. : 스프링 내부 기본 예외를 처리한다 1번 부터 차례로 적용시키며, 1번이 null을 반환하면 다음.......

12월 계획, 길어진 밤들과 함께 [내부링크]

어느덧 올해도 마지막 12월이 되었다. 어째 요즘 해가 짧아진 게 점점 느껴진다 했다. 사진은 한 2주 전쯤? 낙엽이 다 떨어지기 전 찍어둔 사진이다. 1) 근황 2) 최근 공부 상황 3) 공부 계획 1. 근황 어제 하남 스타필드에서 열린 배달의민족 팝업 스토어에 다녀왔다. 어느덧 팝업 스토어까지 열리는 걸 보니 이 회사도 진짜 엄청 성장했음을 몸소 느끼는 날이었다. 배달이랑 같이 찍은 것도 있는데... 너무 이상하게 나와 배달이 단독샷 하나만 올려야겠다. 팝업 스토어에서 받은 피규어와 구매한 포스터도 있다!! 포스터는 내방 모니터 뒤에, 피규어는 내 Mac Mini 위에 올라가 있다. 공부하기 좋은 계절이라고 배달이가 알려주는 것 같다... .......

WoowaCon 2021 [후기] [내부링크]

2021 우 아이콘을 선택적으로 들은 후, 기록 겸 가볍게 남기는 글입니다. 0. 짧은 후기 2020 우아콘 의 경우 영한 님의 마이크로 서비스 여행기만 봤었는데, 이번에는 좀 더 다양한 분들의 컨퍼런스를 보았다. 2021 우아콘은 총 3일간 진행되었으며, 대략적으로 영상당 25~30분 정도 되는 길이었다. 우선적으로 흥미 있는 개발 관련 내용부터 살펴봤으며, 이후 개발 외(예를 들면 베트남 진출기, 초기 배민 스토리, 이력서 팁) 내용을 보았다. 10편을 주면 1만원을 준다길래 10편은 채워서 들었다! (근데 아직도 쿠폰 같은 거 안 들어 왔다... 이거 어디로 사라진거지??...) 일반인들이 생각하기에 단순한 배달 대행 앱 서비스 회사라고 생각할 텐.......

스프링 부트 퀵스타트 [리뷰] [내부링크]

스저의 돈으로 직접 사서 직접 완독해 본 후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할 것이며, 단점은 단점대로 언급할 것입니다. <읽은 기간> 2021/10/24 ~ 2021/11/19 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은 소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 일단 당연하게 JAVA는 알아야 한다. 그 외로 약간의 스프링 기본 내용을 알고 있어야 한다. 스프링을 몰라도 읽을 수는 있겠지만, 그보다 같은 저자가 작성한 스프링 퀵 스타트 먼저 읽어보길 권장한다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될.......

[백준][C++] 16929번: Two Dots <162> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번 문제는 그레프 상에서 사이클을 찾아내는것이 핵심이다. 사이클을 찾는 여러 방식이 있겠지만, 대표적으로 하나의 방식을 기억해두기 위해 글을 작성한다. 사이클은 이전칸(prev) 에서 현재칸(now)로 이동했을때, 이미 방문한적이 있는 칸을 방문했으면 길이가 4 이상인 사이클이 존재한다고 볼 수 있다. 이전칸의 좌표를 (px, py) => 현재칸의 좌표(x, y) 라고 하겠다. 현재칸을 방문 처리 한 후, 다음으로 이동할수 있는칸은 3개이다! 3개라니? 4개 아니야? 라고 생각할수도 있다. 하지만 3곳만 가능하도록 코드를 구현하였.......

[Spring] 로그인 처리1 - 쿠키, 세션 - 3 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 18. 로그인 처리1 - 쿠키, 세션 - 3 7. 로그인 처리하기 - 직접 만든 세션 적용 지난 시간까지 직접 구현한 SessioManager를 활용하여 로그인, 로그아웃을 구현해보자! LoginController - loginV2() 로그인 처리과정의 핵심음 다음 한줄이다. 위와 같이 sessionManager에게 member 와 HttpServletResponse를 인자로 넘겨주면 로그인 성공시 세션 저장소에 member를 등록함과 동시에 session 쿠키또한 response에 담겨 클라이언트에게 전달된다. 이렇게 전달된 session 쿠키는 클라이언트 브라우저의 저장소에 저장.......

[백준][C++] 16940번: BFS 스페셜 저지 <163> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 이번 문제를 풀고 느낀점은 역시 나는 스스로 생각하는 능력이 딸린다는 점 이다. 경험해보지 못한부분은 생각을 못해낸다... 그냥 많이 풀어서 경험량을 늘리는게 답인것 같다... 생각의 흐름 보자마자 모르겠단 생각만 20분 하다 다른분들의 푸리과정을 참고하게 되었습니다. 예를 들어 순서가 [1 2 4 3 5] 와 같이 되어있다고 해보자. 그레프는 다음과 같다. 1번 정점부터 방문한다고 해봅시다. 맨처음에 Queue에는 1번이 담겨있게 됩니다. 1) Queue에서 하나를 꺼내면 x번이 나오게 됩니다. (위 예시에서는 1번이 나오게 됩니다) 2) 이제 x에 인접한.......

[TDD] 문자열 덧셈 계산기 [내부링크]

스스로 공부하고 작성해본 코드들을 기록합니다. 1. 요구사항 2. 생각해보기 (많이 부족한 코드이기 때문에, 참고하기에는 좋지 않은 코드입니다. 피드백도 없는 코드입니다. 후에 발전된 저를 보기위해 남겨봅니다) 가장 먼저 도메인 분리를 어떻게 해야할까? 이거 고민하는데 가장 많은 시간이 들었다. 도메인 분리부터 시작하는 설계에 익숙하지 않으며, 관련된 공부를 해본적이 없기에 내 주관을 갖고 도메인을 분리해 보았다. 구현 ToDo list 크게 3개로 나누었으며 다음과 같다. 1) 문자 하나 검증기 2) 구문 분석기 3) 계산기 대략적인 도식이다. 아직 다이어그렘이나, Domain에 대한 공부를 직접적으로 해본적이 없어 아는정도로만 그.......

[백준][C++] 13549번: 숨박꼭질 3 <164> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번문제의 핵심은 X*2를 할경우 시간이 0초가 든다는 점 이다. 같은 위치에 있는데, 각각이 n초와 n+1초 가 결렸다면 당연하게 n초인것을 먼저 사용해야 한다. 이점에서 우선순위 큐가 먼저 떠올랐다. 이 풀이는 글 맨 밑에 추가해 두겠다. 이 문제는 우선순위 큐로 분명 해결이 가능하다. 하지만 조금 색다를 풀이를 발견하여 이를 기록하고자 한다. 바로 Queue를 2개 사용하는 것 이다. Q1에는 직전위치에서 시간 변경이 없이 이동한 것을 삽입해 주고, Q2에는 직전위치에서 시간이 +1 되어 이동한 것을 삽입해주면 된다. 예를 들어 5에.......

[Spring] 로그인 처리2 - 필터, 인터셉터 - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 19. 로그인 처리2 - 필터, 인터셉터 - 1 1. 서블릿 필터 - 요청 로그 필터를 사용하여 사용자의 모든 요청에 로그를 남겨보자. LogFilter - 로그 필터 상요자 정의 필터를 만들기 위해서는 Filter 인터페이스를 구현해야 한다. Filter 인터페이스를 구현할때는 init(), doFilter(), destroy()를 오버라이딩 하게 된다. Http 요청이 오면 다음 doFilter가 호출되게 된다. ServletRequest request 는 HTTP 요청이 아닌 경우까지 고려해서 만든 인터페이스이다. HTTP를 사용하면 HttpServletRequest httpRequest &#x3.......

[Spring] 로그인 처리2 - 필터, 인터셉터 - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 20. 로그인 처리2 - 필터, 인터셉터 - 2 3. 스프링 인터셉터 - 소개 스프링 인터셉터는 서블릿 필터와 비슷하지만, 스프링 MVC가 제공하는 기술이다. 스프링 인터셉터의 흐름 인터셉터는 프론트 컨트롤러(DispatcherServlet) 과 컨트롤러 사이에서 호출된다. 스프링 인터셉터에도 URL 패턴을 적용할 수 있는데, 서블릿 URL 패턴과는 다르고, 서블릿 보다 매우 정밀하게 설정할 수 있다. 스프링 인터셉터의 제한 위와 같이 로그인 여부를 체크하기에도 좋다. 또한 인터셉터는 체인으로 구성되어, 여러 체인을 추.......

[Spring] 검증1 - Validation - 3 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 12. 검증1 - Validation - 3 6. 오류 코드와 메시지 처리 1 위에서는 오류 메시지를 직접 추가해줬었는데, 이렇게 직접 추가하다보면 통일성이 없어 진다. 같은 내용의 오류메시지 이지만, 구문이 조금씩 달라질수도 있다. 이를 좀더 효율적으로 오류 메시지를 다루어 보자. properties에 한번에 저장해두고, 메시지처럼 사용할수가 있다. 이러한 활용법을 알아보기 전에 우선 FieldError 생성자를 다시한번 살펴보자. FieldError 생성자 이전 글에서는 살펴보지 않았던 codes, arguments 에 대하여 알아보자. 이.......

[Spring] 검증1 - Validation - 4 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 13. 검증1 - Validation - 4 10. 오류 코드와 메시지 처리 5 오륰코드 관리전략 핵심은 구체적인 것 을 먼저 사용하고, 덜 구체적일수록 나중에 사용한다. MessageCodesResolver 는 required.item.itemName 처럼 구체적인 것을 먼저 만들어주고, required 처럼 덜 구체적인 것을 가장 나중에 만든다. 그럼 왜 이런식으로 오류코드를 만들까? 모든 오류코드에 대하여 메시지를 전부 다 만들기는 힘들다. 일반적이면서 중요하지 않은 메시지는 범용적인 오류 코드인 required 와 같이 사용하고, 정말 중요한 내용은.......

[백준][C++] 13023번: ABCDE <161> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 친구 관계는 양방향 이기 때문에 vector를 이용하여 다음과 같은 함수를 만들어 주었다. x, y 양쪽다 추가해줘야 무방향이 된다. 이후의 고민은 친구 관계를 어떻게 확인해야 하는가 였다. A->B->C->D->E 처럼 친구 관계가 가능해야 하는데... 이를 어떻게 구별할까 하다 DFS를 깊이 5까지 진행하면 되겠다는 생각을 했다. 따라서 간단하게 DFS를 돌면 되는 문제로 바뀌게 되었다. DFS의 구현방법은 어렵지 않다. 모든 정점(모든 사람의 번호)에서 탐색을 시작을 하면서, 아직 방문하지 않은 친구를 찾으면서 DFS를 계속진행한.......

[Spring] 검증2 - Bean Validation - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 14. 검증2 - Bean Validation - 1 1. Bean Validation - 소개 기존에 직접 구현하였던 검증과정은 상당하게 번거롭다. 특정 필드에 대하여 하나 하나 전부 검증과정을 거처야 하니 노가다에 가까웠다. 이를 해결하기 위해 등장한것이 Bean Validation 이다. 우선 다음 코드를 살펴보자. 위와 같이 Bean Validation을 잘 활용하면, 애노테이션 하나로 검증 로직을 매우 편리하게 적용할 수 있다. 이런 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고, 표준화 한 것이 바로 Bean Validation 이다. Bean Valida.......

[Spring] 검증2 - Bean Validation - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 15. 검증2 - Bean Validation - 2 5. Bean Validation - 오브젝트 오류 Bean Validation 에서 특정 FieldError가 아닌, 오브젝트 관련 에러 또한 처리가 가능하다. (다만 권장하지 않는 방식이다) 바로 @ScriptAssert()를 사용하면 된다. 실행해보면 정상적으로 작동한다. 메시지 코드는 다음과 같이 생성된다. 그런데 실제 사용해보면 제약이 많고 복잡하다. 그리고 실무에서는 검증 기능이 해당 객체의 범위를 넘어서는 경우들도 종종 등장하는데, 그런 경우 대응이 어렵다. 따라서 오브젝트 오류(글로벌 오류)의 경.......

[Spring] 로그인 처리1 - 쿠키, 세션 - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 16. 로그인 처리1 - 쿠키, 세션 - 1 1. 회원 가입 우선 데이터를 저장할 Member entity부터 만들어야 한다. Member MemberRepository MemberRepository는 Member를 저장해두는 저장소 역할을 한게된다. MemberController 이후 회원가입 뷰 템플릿을 추가해주면 끝난다 (templates/members/addMemberForm.html ), 이 과정은 생략. BeanValidation 기능 덕분에 검증이 매우 쉬워졌다. 2. 로그인 기능 로그인 기능을 개발해보자. 우선 세션등록이나 쿠키는 나중에 생각하고, 우선적으로 로그인 ID, 비밀번호를.......

[Spring] 로그인 처리1 - 쿠키, 세션 - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 17. 로그인 처리1 - 쿠키, 세션 - 2 3. 로그인 처리하기 - 쿠키 사용 이번시간에는 로그인 상태를 유지하기 위해서 쿠키를 사용해 보자. 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달하자. 그러면 브라우저는 앞으로 서버로 요청을 보낼때 마다 이전에 받은 쿠키를 지속해서 서버로 보내준다. 쿠키의 종류 2가지 영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지 세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지 우선 로그인에 성공항 회원들에게 response에 cookie를.......

[Spring] 검증1 - Validation - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 11. 검증1 - Validation - 2 3. BindingResult1 스프링이 제공하는 BindingResult를 통해 검증 오류 처리 방법을 알아보자. addItemV1 우선 이전 글에서 하나하나 검증하던 코드가 어떻게 변경되었는지 확인해 보자. 우선 addItemV1 컨트롤러의 인자로 BindingResult 가 추가되었다. 이전에 오류를 저장해두는 errors Map과같은 역할을 한다. BindingResult bindingResult 파라미터의 위치는 @ModelAttribute Item item 다음에 와야 한다. - 필드 오류 : FieldError 필드에 오류가 있는 경우, 이전과 달리 FieldEr.......

[알고리즘] 비트마스크 조합, 부분수열 [내부링크]

예전부터 비트마스크 활용하는거 정리 한번 해야지... 해야지 하다 안해서... 이번에 정리해본다. 먼저 부분수열부터 문제를 통하여 알아봅시다. 1. 비트마스크를 활용하여 부분 수열 구하기 위 백준 문제를 통하여 설명해보겠습니다. 문제의 예시처럼 5개의 원소가 있다고 해봅시다. 각 원소 하나마다 (포함 or 미포함) 둘중 하나의 경우를 갖게되니, 총 2^N (N은 원소의 개수)개의 부분수열이 가능하다. 위 예시는 워소가 5개이니 32개의 부분수열이 가능하게 됩니다. 위의 5개의 원소가 포함된다면 1을 포함되지 않는다면 0으로 표현이 가능합니다. 다음과 같이 말이죠! 지금부터 상태와 표현값 이란 단어를 사용하겠습니다. (임의로 설명하기.......

[Thymeleaf] 체크 박스 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 체크 박스 이번시간에는 체크박스의 문제점에 대하여 알아본 후, 이걸 Spring MVC 의 기능을 통해 수정해보고, 마지막으로 타임리프로 수정해볼것 이다. 우선 다음과 같은 컨트롤러와 체크박스가 있다고 해보자. 그냥 등록 Form을 보여주기 위한 컨트롤러 입니다. 단순 HTML 체크 박스 로그를 통하여 실행결과를 확인해보면 다음과 같다. - FormItemController : item.open=true //체크 박스를 선택하는 경우 - FormItemController : item.open=null //체크 박스를 선택하지 않는 경우 체크 박스를 체.......

[Thymeleaf] 체크 박스 - 멀티 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 멀티 체크 박스 우선 모델에 데이터를 담는 컨트롤러를 확인해 봅시다. 이제 상품 등록 Form에 멀티체크 박스 부분을 추가해 봅시다! 결과 는 다음과 같습니다. 우선 th:each="region : ${regions}" 을 통해 반복문을 돌도록 됩니다. 컨트롤러에서 넘어온 regions 라는 Model에 담겨있는 Map이 있다. Map의 반복마다 region이 하나씩 추출되는데, region.key로 Map의 Key값을 알아내 th:value로 출력하고, region.value 로 값을 알아내서 th:text로 label에서 글씨가 보이도록 출력하게 됩니다. .......

[Spring] 메시지, 국제화 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 9. 메시지, 국제화 1. 스프링 메시지 소스 설정 스프링은 기본적으로 메시지 관리 기능을 제공한다. 메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource를 스프링 빈으로 등록하면 되는데, MessageSource는 인터페이스다. 따라서 구현체인 ResourceBundleMessageSource 를 스프링 빈으로 등록하면 된다. 직접 등록하는 방식을 코드로 살펴보자. - setBasenames() 로 설정 파일의 이름을 지정할 수 있다. "messages" 로 지정하면 messages.properties 파일을 읽어서 사용하게 됩니다. 추가로 국.......

[백준][C++] 2529번: 부등호 <159> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 두가지 풀이가 가능하다. 완전탐색방식, 더 나아가 백트래킹으로 처리가 가능하다. 완전탐색 방식 index번째 숫자를 결정할거라는 의미의 재귀 함수를 다음과 같이 구현하였다. 이전에 사용한 숫자인지 확인을 하면서 string num을 만들어 가는것 이다. 최종적으로 원하는 길이에 도달했을때 부등호가 알맞은지 검사후 vector에 삽입해주면 된다. 마지막으로 부등호검사까지 끝난 string들이 모여있는 vector에서의 최대값과 최소값의 선택이 중요하다. C++의 minmax_element 를 사용하는 것 이다. auto 키워드로 받으면 pair의 주소가 넘.......

[Spring] 검증1 - Validation - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 세션 10. 검증1 - Validation - 1 1. 검증 직접 처리 - 소개 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 그리고 정상 로직보다 이런 검증 로직을 잘 개발하는 것이 어쩌면 더 어려울 수 있다. 우선 상품 저장이 검증 실패되는 경우를 그림으로 살펴봅시다. 고객이 폼에 입력한 값이 지정된 범위를 넘어가거나, 또는 너무 작은경우 서버에서 검증 로직이 실패해야 한다. 이렇게 검증에 실패한 경우 고객이 보냈던 실패한 데이터를 Model에 저장하여 다시 반환함으로써 어떤 값을 잘못 입력했.......

[백준][C++] 1248번: 맞춰봐 <160> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 아... 일단 각 자리마자 -10 ~ 10 까지 총 21가지의 경우가 가능한데, 최대 10자리가 가능하니 21^10이 된다. 이는 시간내 풀수 없다는 의미이다. 경우의 수가 너무 많다. 총 2가지 아이디어를 통해 시간을 줄일수 있었다 1) 부호를 정하여 줄이는 방식 다음과 같이 집합 A가 [3, -2, -1, 5] 라고 해보자. S[i][i] 는 자기자신 하나만을 의미한다. 즉, S[0][0]은 값은 모르지만 양수라는 것을 알려주고 있는것 이다. 따라서 S[1][1]은 음수, S[2][2]는 음수, S[3][3]은 양수가 된다. 0인 경우에는 0밖에 될수가 없다. 따라서 각 칸마다 1~10.......

[Thymeleaf] 블록 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 블록 블록은 HTML 태그가 아닌, 타임리프의 유일한 자체 태그이다. 블록은 each 문에서의 불편한점을 보완하는데, 어떤 부분을 보완하는지는 다음 코드를 살펴보자. 컨트롤러와 뷰 코드는 다음과 같다. 실행 결과는 다음과 같다. <div></div> 2 덩어리가 하나의 블록 단위로, 총 3개의 블록이 생겼다. 각 블럭을 색으로 구분하였다. 원래의 each 문을 사용하면 사용자 이름1, 나이 1 부분만 반복되어 버린다. 요약 부분까지 하나의 블록단위로 만들어 반복시키고 싶다면 블록을 사용하면 된다.

[Thymeleaf] 자바스크립트 인라인 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 자바스크립트 인라인 타임리프는 자바스크립트에서 타임리프를 편리하게 사용할 수 있는 자바스크립트 인라인 기능을 제공한다. 자바스크립트 인라인 기능은 다음과 같이 적용하면 된다. 우선 컨트롤러와 뷰를 확인해 봅시다! 결과는 다음과 같습니다. 텍스트 렌더링 결과 창에서 F12 를 눌러 개발자도구를 열어보면 다음과 같은 경고를 확인할 수 있습니다. UserA가 정의되지 않았다는 경고를 보여주고 있습니다. 이는 var username = UserA; 부분에서 오류가 있기 때문입니다. 문법이 오류이기 때문이죠.......

[Thymeleaf] 템플릿 조각 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 템플릿 조각 웹페이지를 개발할때는 공통된 부분이 많다. 상단의 네비게이션 바, 하단의 저작권 표시 부분등 어느 페이지에 가던 공통적으로 처리되는 부분이 있다. 타임리프는 이런 문제를 해결하기 위해 템플릿 조각과 레이아웃 기능을 지원한다. 우선 이번 글을 결과물을 살펴봐야 이해가 가기 때문에 컨트롤러와 뷰 코드부터 먼저 살펴봅시다. footer fragmentMain 실행 결과는 다음과 같습니다. 가장 먼저 insert 부터 살펴봅시다. 부분 포함 insert 우선 위 코드의 의미는 template/fragment/footer.html.......

[알고리즘] next_permutation (다음 순열) [내부링크]

next_permutation (다음 순열 구하기) 우선 순열의 특징을 먼저 살펴봅시다! A라는 집합의 원소가 [1, 2, 3, 4] 라고 해보자. A의 순열은 다음과 같다. 1 2 3 4 (오름차순) : 첫 순열 1 2 4 3 1 3 2 4 1 3 4 2 ... 2 1 3 4 2 1 4 3 2 3 1 4 2 3 4 1 ... 4 3 2 1 (내림차순) :마지막 순열 오름차순으로 시작했던 순열이, 최종적으로 내림차순으로 배열되어 끝나게 된다. 총 N! 개의 서로 다른 순열이 있다. 1 2 로 시작하는 순열인 1 2 ? ? 의 마지막 순열의(내림차순) 다음 순열을 어떻게 구할까? 1 2 ? ? 의 마지막 순열은 1 2 4 3(내림차순) 4 3 이 내림차순으로 끝난다. 앞에 1 2로 시작하는 마지막 순열 a가 있을것 이다. (위 에서는 1 2 .......

[Thymeleaf] 레이아웃 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 레이아웃 이전 템플릿 조각에서는 코드 조각을 갖고와서 내가 원하는 부분에 추가하는 방식 이였다면 (내 코드 <-- 공통 부분) 이번 템플릿 레이아웃 에서는 코드 조각을 레이아웃에 넘겨 사용하는 방법에 대하여 알아보자 (내 코드 --> 공통 부분) 예를 들어서 <head> 안에는 모든 헤더가 공통으로 사용하는 css , javascript 같은 정보들이 있는데, 이러한 공통 정보들을 한 곳에 모아 공통으로 사용하지만, 각 페이지마다 필요한 정보를 더 추가해서 사용하고 싶다면 다음과 같이 사용하면 된다. 우.......

[Mockito] Mock 객체 만들기, Mock 원리, 프록시 원리 (@MockBean) [내부링크]

너무 궁금해서 미칠것 같은 내용을 공부후 정리한 내용입니다. 영혼을 갈아서 정리해 보았습니다! 항상 모든 인터페이스의 구현체를 만들어야만 테스트가 가능할까요? 컨트롤러를 테스트 하고 싶은데, 서비스의 구현체 없이 인터페이스 만을 활용하여 테스트 할수는 없는것 일까요? 이에 대한 궁금증에서 시작한 공부 내용을 정리해 봅니다. 목차 1. Mock의 의미 2. Mock 객체 만들기 3. CGLIB 프록시를 활용한 Mock의 원리 이해하기 Mock? Mocking? MockUp? - Mock의 의미는 "테스트를 위해 만든 모형" 을 의미합니다. - Mocking의 의미는 테스트를 위해 실제 객체와 비슷한 모의 객체를 만든는 것을 말합니다. - MockUp의 의미는.......

[Thymeleaf] 입력 폼 처리 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 입력 폼 처리 타임리프가 제공하는 입력 폼 기능을 적용하면, 기존 프로젝트의 폼 코드를 효율적으로 개선할수가 있다. 우선 수정할 기존 코드를 확인해 봅시다. 삼품을 수정하는 수정 Form에 해당합니다. 이중 대표적으로 상품 ID 를 살펴봅시다. 나머지도 같은 원리로 변경됩니다. 기존의 코드에는 id, name이 같은 값으로 중복되고 있으며, value도 직접 타이핑 하여 지정해주고 있습니다. 이러한 과정을 한번에 처리하는 방법을 타임리프는 제공하고 있죠! 우선 컨트롤러를 살펴봅시다. 컨트롤러에서는 model을.......

[Thymeleaf] URL 링크 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. URL 링크 타임리프에서 URL을 생성할 때는 @{...} 문법을 사용하면 된다. 우선 간단한 컨트롤러부터 하나 만들어 봅시다! 이를 처리할 뷰 또한 다음과 같습니다. 실행 결과는 다음과 같습니다. 소스 보기로 살펴본 결과 입니다. - 단순한 URL 단순하게 정적 URL만 추가하는 경우 @{/hello} 라고 추가하니 href="/hello" 가 추가된것을 확인할수 있다. - 쿼리 파라미터 쿼리파라미터 추가를 위해 다음과 같이 코드를 작성하였습니다. () 괄호 안의 param1, param2는 쿼리 파라미터로 처리된것 입니.......

[Thymeleaf] Literals [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 리터럴 타임리프에는 대표적으로 다음과 같은 리터럴들이 있습니다. 리터럴은 일반적으로 소스 코드상에 고정된 값을 말하죠! 문자: 'hello' 숫자: 10 불린: true, false null: null 타임리프에서는 문자 리터럴의 경우 항상 '(작은 따옴표) 로 감싸줘야 합니다. 문제는... 이게 항상 ' 로 감싸는게 귀찮다는 점 이죠. 따라서 타임리프에서는 공백없이 쭉 이어진 경우 의미있는 토큰으로 인식하여 다음과 같이 따옴표를 생략할수도 있습니다. 하지만 다음과 같이 공백이 있는경우에는 오류를.......

[Thymeleaf] 연산 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 연산 연산은 HTML의 엔티티를 사용하는 부분만 주의하면 됩니다. 이번 연산 글은 우선 코드로 살펴본후 설명을 이어 나가겠습니다. 우선 다음 컨트롤러를 확인해 봅시다. 이를 처리하는 뷰 코드는 다음과 같습니다. 실행 결과는 다음과 같습니다. - 비교연산자 비교연산의경우 HTML 엔티티를 사용해야 하는 부분을 주의합시다. (아래 도큐먼트 참고) > (gt), < (lt), >= (ge), <= (le), ! (not), == (eq), != (neq, ne) 하지만 우리의 코드를 보면 위에서 >= 와 같.......

[백준][C++] 15650번: N과 M (2) <158> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 문제 자체는 쉬웠다. 다만 배울점이 있어 글을 남겨본다. 기존의 풀었던 경험대로 각각의 위치에 어떤수를 추가할것인지를 선택하는 방식이 아니라, 선택의 관점에서 해결하는 풀이 방식이며, 기존 풀이보다 빠르다. M개의 수를 뽑을건데, 어떤수가 들어갈지만 결정하면 되는 것 이다. 어떤수가 들어갈지만 결정하면 오름차순의 수는 항상 만들어질 수 있다. 예를 들어 4, 1, 7을 고르면 => 1, 4, 7 이라는 오름 차순의 수가 만들어진다. 어떤수든 서로다른 3개를 선택하면 오름차순의 수로 만들수가 있다. 따라서 서로다른 수 3개.......

[Thymeleaf] 속성 값 설정 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 속성 값 설정 타임리프에서 속성값을 지정할때는 th:* 와 같이 속성을 적용하면 기존 속성을 대체한다. 만약 기존 속성이 없다면 새로 만든다. 우선 컨트롤러부터 하나 만들어 봅시다. 아주 간단한 컨트롤러 입니다. 이제 이를 처리할 뷰는 다음과 같습니다. 실행결과를 소스보기로 보면 다음과 같습니다. 속성 설정 th:* 속성을 지정하면 타임리프는 기존 속성을 th:* 로 지정한 속성으로 대체한다. 기존 속성이 없다면 새로 만든다. 다음 예를 살펴보자. 원래 첫줄처럼 name 속성의 값은 "mock"이.......

[Thymeleaf] 반복 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 반복 타임리프에서 반복은 th:each 를 사용한다. 추가로 반복에서 사용할 수 있는 여러 상태 값을 지원한다. 우선 컨트롤러에서 여러 User의 정보를 담아서 model로 반환해 봅시다. 이제 이 데이터를 처리할 뷰 코드를 확인해 봅시다. 결과는 다음과 같습니다. 반복 기능 반복하려면 오른쪽 컬렉션인 users의 값을 하나씩 꺼내서 왼쪽 변수 user 에 담아 태그를 반복 실행하게 됩니다. th:each는 단순 list 뿐만 아니라, java.util.Iterable , java.util.Enumeration 을 구현한 모든 객체를 반복에 사용할 수 있.......

[Thymeleaf] 조건부 평가 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 조건부 평가 조건부 평가는 말 그대로 if 문과 같이 어떤 문장이 참일경우 실행하는 것 이다. if, unless(if의 반대) 2가지 가 있다. 간단한 컨트롤러는 다음과 같다. 이를 처리하는 뷰는 다음과 같다. 실행 결과는 다음과 같습니다. if, unless 타임리프는 해당 조건이 맞지 않는경우 태그 자체를 렌더링하지 않는다. 그냥 태그 자체가 없어진다. 다음 코드를 살펴보자. 예를 들어 위와 같은 태그가 있으면, 나이가 26일경우 if문이 false가 되며, <span>...<span> 부분 자체가 렌더링 되지 않고.......

[Thymeleaf] 주석 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 주석 원래 주석은 너무 간단한 내용이라 정리하지 않으려다가... 또 타임리프 주석중에 신박한 주석이 있어 이를 위해 글을 작성한다. 간단한 컨트롤러와 뷰 코드를 작성해보자! 실행결과는 다음과 같습니다. 랜더링된 결과이죠! 총 3개의 주석이 사용 가능하다. 1. 표준 HTML 주석 자바스크립트의 표준 HTML 주석은 타임리프가 렌더링 하지 않고, 그대로 남겨둔다. 2. 타임리프 파서 주석 타임리프 파서 주석은 타임리프의 진짜 주석이다. 렌더링에서 주석 부분을 제거한다. 3. 타임리프 프로토타입 주석 HTML 파.......

[Thymeleaf] SpringEL, 지역변수 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. SpringEL, 지역변수 타임리프에서 변수를 사용할 때는 변수 표현식을 사용한다. => 변수 표현식 : ${...} 우선 데이터를 넘기는 컨트롤러를 만들어 봅시다. 코드는 다음과 같습니다. 이를 처리하는 뷰는 다음과 같습니다. 실행 결과는 다음과 같습니다. SpringEL 각각 Object, List, Map 에 담겨있는 데이터에 어떻게 접근해서 데이터를 추출해야 하는지 확인할수 있습니다. - Object 예를들어 user의 username 프로퍼티에 접근하기 위해서 user.username 과 같이 사용할수가 있습니다. 내부적으로는 u.......

[Thymeleaf] 기본 객체들 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 기본 객체들 타임리프는 기본 객체들을 제공한다. #ctx: the context object. #vars: the context variables. #locale: the context locale. #request: (only in Web Contexts) the HttpServletRequest object. #response: (only in Web Contexts) the HttpServletResponse object. #session: (only in Web Contexts) the HttpSession object. #servletContext: (only in Web Contexts) the ServletContext object. 위 기본 객체들을 다음과 같이 사용할 수 있다. 그런데 #request는 HttpServletRequest 객체가 그.......

[Thymeleaf] 유틸리티 객체와 날짜 [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 유틸리티 객체와 날짜 타임리프는 문자, 숫자, 날짜, URI등을 편리하게 다루기 위한 유틸리티 객체들을 제공한다. 타임리프 유틸리티 객체들 #message : 메시지, 국제화 처리 #uris : URI 이스케이프 지원 #dates : java.util.Date 서식 지원 #calendars : java.util.Calendar 서식 지원 #temporals : 자바8 날짜 서식 지원 #numbers : 숫자 서식 지원 #strings : 문자 관련 편의 기능 #objects : 객체 관련 기능 제공 #bools : boolean 관련 기능 제공 #arrays : 배열 관련 기능 제공 #lists , #sets , #maps .......

[백준][C++] 1932번: 정수 삼각형 <155> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 DP[i][j]의 의미부터 정하자. 이번문제는 DP의 의미를 쉽게 정할수 있었다. DP[i][j] : i층 j번째 (또는 i행 j열) 수까지 도달했을때의 최대값 DP[1][1]이야 당연히 arr[1]값이 된다. 하나뿐이니 이는 당연하다. DP[2][1]는 DP[1][1]로부터 arr[1]를 더한 값이 된다... DP[3][2]는 DP[2][1], DP[2][2]중 큰 수 에다가 arr[3][2]를 더하면 된다. ... DP[i][j]는 DP[i-1][j-1], DP[i-1][j]중 큰 수 에다가 arr[i][j]를 더하면 된다. 다음 그림을 살펴보자. DP를 간단하게 구현하면 끝난다. 나의 코드

팀 개발을 위한 Git GitHub 시작하기 [리뷰] [내부링크]

저의 돈으로 직접 사서 직접 완독해 본 후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할 것이며, 단점은 단점대로 언급할 것입니다. <읽은 기간> 2021/10/02 ~ 2021/10/012 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은 소감 Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 아무런 지식도 필요하지 않습니다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => Git과 Github는 개발에 있어서 빠질 수 없는, 어쩌면 모든 개발자들이 사용하는 가장 중요한 도구 중 하나이다. 팀원들과 소스를 공유하고, 이슈를 추가하고, 수정하고, 협업하고 등등 git이 없었다면 정말 힘들었을 것이다. git은 꼭 배워야.......

[백준][C++] 17404번: RGB거리2 <156> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 RGB 거리와 비슷하게 생각했는데, 문제는 원형이다... 1번째 색과 마지막 색이 겹치면 안되는데... 어쩌지?? 결국 다른 분들의 코드를 살펴보게 되었다... 처음에는 3차원 배열을 생각해서 풀어 볼려 했다. DP[i][j][k] i번째 칸을 j 색으로 채우는데, 마지막 칸의 색은 k이다. 하지만 3차원 이 생각처럼 값이 대입 되지않았다. 대신 첫 시작에서 색을 고정하는 방법을 사용하였다. 우선 k변수가 첫번째 칸의 색을 선택한다. 다음 코드를 살펴보자. 예를 들어 첫번째 칸의 색 k가 0(R)이 되었다고 해보자. 다음 for문에서 j가 0일때 DP[1][0.......

[백준][C++] 6064번: 카잉 달력 <157> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 완전탐색으로 다 돌기에는 12억이란 범위가 나와 시간안에 불가능함을 생각했다. 맨 처음 생각한 풀이는 최소공배수 구해서 어떻게 하면 될거같은데? 였지만... 중간에 막혀버린... (가능은 한 풀이) 다른 방법을 찾아보다 %연산을 활용한 방식이 있어 이 방식을 사용해 보았다. M = 5, N = 7, x = 3, y = 2 라고 해봅시다. 1번째 해는 <1, 1>, 11번째 해는 <1, 4>, 2번째 해는 <2, 2>, 12번째 해는 <2, 5>, 3번째 해는 <3, 3>, 13번째 해는 <3, 6>, 4번째 해는 <4, 4>.......

오라클 SQL과 PL/SQL (다양한 예제로 쉽게 배우는) [리뷰] [내부링크]

저의 돈으로 직접 사서 직접 완독해 본 후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할 것이며, 단점은 단점대로 언급할 것입니다. <읽은 기간> 2021/10/7 ~ 2021/10/29 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은 소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 사전 시직은 필요 없습니다. 기초적인 부분은 잘 설명해 주는 책입니다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => SQL 제품으로 원탑을 달리는 oracle의 명성을 엄청나다. 특히 oracle 관련된 책들이 엄청 많다. 국내 SQL 책만 봐도.......

[Thymeleaf] 텍스트 - text, utext [내부링크]

인프런 김영한님의 Spring강의에서 공부한것을 올리며, Thymeleaf의 경우 unit 단위로 공부후 각각 정리하는 글을 작성하겠습니다. 텍스트 - text, utext 가장 기본이 되는 text를 출력하는 방법에 대하여 알아보자. 타임리프는 기본적으로 HTML 테그의 속성에 기능을 정의해서 동작한다. HTML의 콘텐츠(content)에 데이터를 출력할 때는 다음과 같이 th:text 를 사용하면 된다. HTML 테그의 속성이 아니라 HTML 콘텐츠 영역안에서 직접 데이터를 출력하고 싶으면 다음과 같이 [[...]] 를 사용하면 된다. 우선 데이터를 뷰에 전달할 컨트롤러부터 만들어 봅시다. 이후 데이터를 받아 서버사이드 렌더링(SSR) 할 html은 다음과 같습니다. 실행 결.......

[Spring] 스프링 MVC - 기본 기능 - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 7. 스프링 MVC - 기본 기능 - 2 5. HTTP 요청 파라미터 - @ModelAttribute 이전까지는 요청 파라미터를 받아서 필요한 인자를 추출하고, 그 값들을 객체를 만들어 넣어주는 방식을 취하였다. 다음과 같이 말이다. 스프링은 이 과정을 자동적으로 처리해주는 @ModelAttribute 기능을 지원한다. HelloData 롬복으로 @Data를 사용하면 @Getter , @Setter , @ToString , @EqualsAndHashCode , @RequiredArgsConstructor 를 자동으로 적용해준다. @ModelAttribute 적용 - modelAttributeV1 파라미터로 선언된 helloD.......

[Spring] 스프링 MVC - 기본 기능 - 3 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 8. 스프링 MVC - 기본 기능 - 3 9. HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 HTTP API를 제공하는 경우에는 HTML이 아닌, 데아터를 메시지 바디에 담아서 JSON 형식으로 보낸다. <참고> HTML이나 뷰 템플릿을 사용해도 HTTP 응답 메시지 바디에 HTML 데이터가 담겨서 전달된다. 여기서 설명하는 내용은 정적 리소스나 뷰 템플릿을 거치지 않고, 직접 HTTP 응답 메시지를 전달하는 경우를 말한다. TEXT를 직접 반환하는 방식과 3가지, JSON을 반환하는 방식 2가지 를 살펴보자. 설명을 조금 더해보면 - R.......

[Spring] 스프링 MVC - 기본 기능 - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 6. 스프링 MVC - 기본 기능 1. 요청 매핑 MappingController @RestController - @Controller 는 반환값이 String이면 view이름으로 인식되어, viewResolver를 통하여 뷰를 찾고 랜더링 된다. - @RestController는 반환값으로 뷰를 찾는것이 아니라, HTTP 메시지 바디에 바로 입력하여 보낸다. 따라서 위 코드 실행시 바로 "ok" 메시지를 받을 수 있다. @RequestMapping("/hello-basic") - /hello-basic URL 호출이 오면 이 메서드가 실행되도록 매핑한다. - 대부분의 속성을 배열[] 로 제공하.......

[백준][C++] 1309번: 동물원 <154> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 원래는 1차원 배열을 생각했지만, case 별로 3개의 경우로 나뉘기 때문에 2차원 배열로 해야겠다는 생각이 들었다. DP[n][m]의 의미부터 정하려고 노력하였다. DP[n][m] 은 n번째 행에 case i의 동물을 두는방법이다. 하나의 행은 2칸이다 다음과 같이 말이다. 여기서 동물은 둘수있는 방법이 총 3가지 이다. case 0) 왼쪽에 1마리 case 1) 오른쪽에 1마리 case 2) 양쪽모두 비어두기 따라서 d[n][i] = n번째 행에 i방법의 동물을 놓는 경우의 수라고 하면 d[n][0] = d[n-1][1] + d[n-1][2] d[n][1] = d[n-1][0] + d[n-1][2].......

[Spring] MVC 프레임워크 만들기 - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 4. MVC 프레임워크 만들기 - 1 1. 프론트 컨트롤러 도입 - v1 이번시간의 목표는 기존 코드를 최대한 유지하면서, 프론트 컨트롤러를 도입하는것 이다. 먼저 구조를 설계하고, 이후 점진적으로 리펙터링 해나갈 것 이다. 우선 모든 컨트롤러들이 공통적으로 구현해야하는 ControllerV1 이라는 interface를 구현해 보자. 코드는 다음과 같다. 간단하게 porcess()라는 메서드만 선언하고 있다. 이후 Controller1을 구현하는 클래스 들에서는 모두 process() 메서드를 구현해야 한다. 프론트 컨트롤러는 이 인터페이스를.......

[Spring] MVC 프레임워크 만들기 - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 4. MVC 프레임워크 만들기 - 2 4. 단순하고 실용적인 컨트롤러 - v4 지난 글에서 만들었던 v3 컨트롤러는 서블릿의 종속성을 제거하고, 뷰 경로의 중복을 제거하는 기능을 하여 잘 설계된 컨트롤러 이다. 하지만 실제 개발자가 컨트롤러 인터페이스를 구현할때마다 항상 ModelView객체를 생성하고 반환해야 하는 부분이 번거롭다. 좋은 프레임워크는 아키텍처도 중요하지만, 그와 더불어 실제 개발하는 개발자가 단순하고 편리하게 사용할 수 있어야 한다. 소위 실용성이 있어야 한다. 이번 V4는 좀더 개발자에게 실.......

[백준][C++] 17298번: 오큰수 <152> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 1번째 원소부터 N번째 원소까지 모두를 완전탐색 해버리면 1번 원소 위치에서는 N-1번 비교해야 하고, 2번 원소 위치에서는 N-2번 비교해야 하고, ... N-1번 원소 위치에서는 N-2번 비교해야 하니... O(N^2)에 해당하는 시간이 걸린다. 따라서 최대한 딱 1번 전진하면서 스캔해 가면서 확인할 수 있도록 노력하였다. 예를 들어 다음과 같은 예시가 있다고 해보자. stack에는 오큰수를 찾지 못한 수들만 임시로 담아놀것 이다. 맨처음 stack이 비어있기 때문에 1번 위치를 stack에 담아둔다. stack : [1] 그 다음수인(2번위치) 5와 비교하여.......

[oracle] oracle 19c scott 계정 활성화 [내부링크]

하 진짜 scott 계정 활성화하는게 뭐라고... 이렇게 힘드냐.....한 3시간 걸린것 같다... 보통 다른 분들 글에서 설명하는 내용이 대부분 11g나 19c 이전 버전이라 엄청 막혔다. 예전글 보면 unlock하라고들 많이 하시는데, 애당초 19c에서는 scott 계정 자체가 존제를 안해서 unlock이고 나발이고 못한다. 19c 버전에서 성공적으로 scott 계정을 활성화 하는 순서를 (미래의 나를 위해) 기록하겠다. 0) sys 계정으로 로그인 맨처음 cmd 창을 연 후, sqlplus sys/본인비밀번호 as sysdba 로 로그인 해주면된다. 이후 show user 입력시 "SYS"가 되있으면 성공이다. 1) session 변경해주기 2) 19c 기준 scott.sql 파일 위치 확인하기. 오.......

[Spring] 스프링 MVC - 구조 이해 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 5. 스프링 MVC - 구조 이해 1. 스프링 MVC 전체 구조 스프링 MVC도 프론트 컨트로러 패턴으로 구현되어있다. MVC의 프론트 컨트롤러가 바로 DisaptcherServlet 이다. DispacherServlet 서블릿 등록 DispacherServlet 도 부모 클래스에서 HttpServlet 을 상속 받아서 사용하고, 서블릿으로 동작한다. DispatcherServlet => FrameworkServlet => HttpServletBean => HttpServlet 스프링 부트는 DispacherServlet 을 서블릿으로 자동으로 등록하면서 모든 경로( urlPatterns="/&qu.......

[백준][C++] 1676번: 팩토리얼 0의 개수 <153> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 혼자 생각하진 못했고, 다른 분들의 글을 참고하였다. 이 문제의 핵심은 0을 만들수 있는 방법은 2x5 라는 점 이다. 예를 들어 10!은 3628800 이다. 여기서 0이 2개인 이유는 10!을 소인수 분해 해보면 알 수 있다. 10! = 2^6 x 3^4 x 7 x (2^2 x 5^2) = 2^6 x 3^4 x 7 x (10^2) 0이 몇개인지 알아내려면 소인수분해 했을때 2와 5가 몇개 나오는지 알아야 한다. 또한 짝수인 2의 개수보다 5의 개수가 항상 더 적기때문에 최종적으로 5의 개수만 세면 된다. 100!을 예로들어보자. 5가 1개인 경우 : 5x1, 5x2, 5x3, ... , 5x20 &#x3.......

[Spring] 서블릿 - 2 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 2. 서블릿 5. HTTP 요청 데이터 - POST HTML Form 이번 시간에는 HTML의 Form을 이용해서 클라이언트에서 서버로 데이터를 전달하는 방법을 공부하였다. 특징 - content-type: application/x-www-form-urlencoded - 메시지 바디에 쿼리 파리미터 형식으로 데이터를 전달한다. username=hello&age=20 우선 간단한 HTML 하나를 src/main/webapp/basic/hello-form.html 에 생성해보자. 스프링 부트를 실행한 후, http://localhost:8080/basic/hello-form.html 로 접속해 보자. username 과 age 를 입력.......

초보 웹 개발자를 위한 스프링5 프로그래밍 입문 [리뷰] [내부링크]

저의 돈으로 직접 사서 직접 완독해 본 후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할 것이며, 단점은 단점대로 언급할 것입니다. <읽은 기간> 2021/9/12 ~ 2021/10/03 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은 소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => JAVA 언어 정도는 명확히 알아야 읽을 수 있습니다. 다음 사진에 대상 독자에 대한 기준이 적혀있습니다. 개인적으로 이런 대상 독자층을 알려주는 책들이 좋더라고요~ Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => 나는 Java, Servlet, .......

[백준][C++] 1577번: 도로의 개수 <151> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 간만에 컨디션이 좋아서 그런가.. 막힘없이 한 20분 정도에 해결했다. PS 시작하고 DP가 가장 잘풀린 날인것 같다. 우선 문제를 보고 매우 거슬리는 점이 있다. 다들 느낄거 같은데 좌표축이 마음에안든다. 보통 문제 풀때 왼쪽 상단 모서리 끝이 시작지점이여야 마음이 편한거 동의하는가? 하지만 잘 생각해보면 시작지점이 왼쪽 상단이라고 생각하고 코드 짜면 그냥 풀린다. 다음 그림처럼 말이다. 처음 입력을 받을때 막힌경로는 vector에 담아둔다. DP map을 만들어볼 시간이다. DP 값을 구하는 방식은 왼쪽 상당 모서리 부터 =&gt.......

[Spring] 서블릿, JSP, MVC 패턴 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 3. 서블릿, JSP, MVC 패턴 1. 회원 관리 웹 애플리케이션 요구사항 간단하게 회원의 정보를 저장하고, 목록으로 조회하는 로직을 구현해볼 것 이다. 회원 정보 - 이름 : name - 나이 : age 기능 요구사항 - 회원 저장 - 회원 목록 조회 우선 회원의 도메인 모델부터 만들어 보자. 롬복을 사용해서 아주 깔끔한 코드를 확인할수 있다. 회원을 저장할 Repository를 구현해 보자. 코드는 다음과 같다. 스프링이였다면 자동으로 싱글톤 레지스트리가 싱글톤으로 관리해주겠지만, 스프링 없이 직접 구현하는 것 이기.......

[Servlet/JSP] Servlet Life Cycle (Servlet 생명 주기) [내부링크]

공부하며 중요하다 싶은 내용들을 블로그에 공부겸 정리한 내용입니다! 지적 댓글 환영합니다~ 인터넷에서 찾을수 있는 글 중에서 가장 자세하게 설명하려 노력하였습니다. 진짜 영혼을 갈아서 설명해 보았습니다. 도움이 되셨다면 좋아요 하나 부탁해요~~ Servlet Life Cycle 클라이언트가 Servlet에 요청을 하면, Servlet은 바로 호출이 되지 않습니다. Servlet은 객체를 생성하고 초기화 작업을 거친 후, 요청을 처리하는 생명 주기를 갖고 있습니다. 우선 다음 그림을 살펴봅시다! 클라이언트로부터 처리 요청 받음 클라이언트가 웹 브라우저를 통해 요청을 보내면 웹서버가 이를 받아서 요청 정보안에 있는 헤더안에 있는 URI를 분석합니.......

[Spring] 서블릿 - 1 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 2. 서블릿 1. Hello 서블릿 톰켓을 직접 설치하는 대신에 SpringBoot를 이용하여 내장 톰켓을 사용할 것 이다. 스프링 부트 서블릿 환경 구성하기 @ServletComponentScan 를 추가하면 스프링 부트가 서블릿을 직접 등록해서 사용할수 있도록 도와준다. 이제 실제로 작동하는 서블릿 코드를 구현해 보자. 우선 코드를 본후 설명해 보겠다. @WebServlet 서블릿 애노테이션 추가해주기. 인자로 2개를 지정해 줬다. - name: 서블릿 이름 - urlPatterns: URL 매핑 HTTP 요청을 통해서 mapping된 URL 이 호출되면 서블릿.......

[백준][C++] 16197번: 두 동전 <150> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 보자마자 든 생각은, 동전 2개의 상태를 한번에 저장해야 편한다. 이거 각각의 객체로 동전 2개 만들면 코드 구현할때 2배로 귀찮아짐이 느껴졌다. (예전에 한번 당한 기억이...) "ok... 그러면 일단 하나의 class로 만들어 보자!" 해서 나온게 다음 class이다. COIN 이라는 클래스 안에 동전 2개의 좌표와, cnt 변수를 추가하였다. 이제 BFS 돌면서 확인해 주면 끝이다. (최소의 값을 구해야 하니 당연 BFS) BFS를 돌때 방문처리는 4차원 배열을 이용하여 저장하였다. 4차원 배열로 저장하는 이유가 뭘까? 2차원 배열 2개를.......

[HTTP] HTTP 헤더 - 캐시와 조건부 요청 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 8. HTTP 헤더2 - 캐시와 조건부 요청 1. 캐시 기본 동작 캐시가 없다면 Client가 요청할때마다 같은 데이터를 계속 새롭게 다운받게 된다는것 정도는 모두 아는내용이다. - 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 한다. - 인터넷 네트워크는 매우 느리고 비싸다. - 브라우저 로딩 속도가 느리다. - 느린 사용자 경험 이번에는 캐시를 적용시켜 보자! 첫 요청은 다음과 같다. 그림을 살펴보자. GET메서드로 /star.jpg로 요청을 하면 서버에서 캐시의 유효 시간을 설정하고, star........

[백준][C++] 1038번: 감소하는 수 <148> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 당분간 완전탐색 문제만 풀어볼 예정~ 생각의 흐름 일단 처음에 문제를 보고 완전탐색은 생각도 안했다. 주어진 N이 1,000,000 까지 인데... 내 기억이 맞다면 O(n^2) 알고리즘으로 구현하면 1만 까지 되는걸로 기억하고 있으니... 다른 방법 없나? 동저계획법도 될거같은데 흠... 이러면서 일단 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 까지를 노트에 썼다. 위의 숫자들은 모두 감소하는 수이다. 따라서 N이 9이하 라면 그냥 출력해주고, 10 이상이라면 뭔가를 적용해줘야 겠다고 생각했다. 감소하는 수를 순차적으로 구하기 위해서는 더 작은 수를 우선적으로 선.......

[Spring] 웹 에플리케이션 이해 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 1. 웹 애플리케이션 이해 1. 웹 서버, 웹 애플리케이션 서버 웹은 모든것이 HTTP 기반으로 작동한다. - HTML, TEXT - IMAGE, 음성, 영상, 파일 - JSON, XML (API) - 거의 모든 형태의 데이터 전송 가능 - 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 Web Server Web Server의 기능 HTTP 프로토콜을 기반으로 하여 클라이언트(웹 브라우저 또는 웹 크롤러)의 요청을 서비스 하는 기능을 담당한다. 요청에 따라 아래의 두 가지 기능 중 적절하게 선택하여 수행한다. 1) 정적인 컨텐츠 제공 WAS를 거치지 않.......

[백준][C++] 15683번: 감시 <149> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 하... 골드5 구현도 생각보다 빡세다... 일단 가장 작은 기능의 단위인, 한 방향으로 쭉 체크하는 함수를 만들야 겠다고 생각했다. 그래서 나온 함수가 다음 go() 이다. 인자로는 방향과, cctv를 전달해준다. 코드 그대로 방향 하나, 시작 좌표를 알려주면 해당 방향으로 끝까지 체크하는 함수이다. 그다음으로는 CCTV의 수만큼 확인을 해야하는데, 여기서 DFS가 사용된다. 이부분에서 완전탐색이라는 느낌이 들었다. 예를 들어 다음과 같은 input이 있다고 해보자. CCTV는 총 3개 좌표와, 종류번호를 담아 {x좌표, y좌표, 종류번호}로 객체.......

[AWS] AWS 클라우드 소개 [내부링크]

2021/09/30 에 있었던 AWSome Day 컨퍼런스의 내용을 요약한 글 입니다. 해당 글의 모든 사진의 출처는 AWS 입니다. 강의 1 : AWS 클라우드 소개 기존의 온프레미스 환경에서는 비지니스 시스템을 실행하는데 필요한 모든 물리적 구성 요소를 회사에서 소유, 유지, 운영, 유지 관리 및 보관했습니다. 사용자는 기업 네트워크에 연결하여 서비스를 받을수 있었다. 클라우드란? 클라우드 서비스 플랫폼에서 호스팅하는 여러 리소스를 인터넷을 통해 접근하도록 제공하는것을 말합니다. 원격지에 있는 IT리소스, 스토리지, 데이터베이스, 서버 등과 같은 웹서비스 등을 임대해서 이용하는 서비스 이다. 클라우드를 사용하면 기존에 하드웨어 구성.......

[AWS] AWS 클라우드 : 컴퓨팅 [내부링크]

2021/09/30 에 있었던 AWSome Day 컨퍼런스의 내용을 요약한 글 입니다. 해당 글의 모든 사진의 출처는 AWS 입니다. 강의 2 : AWS 클라우드 핵심 서비스 소개 - 컴퓨팅 우선 그 유명한 EC2에 대해 살펴보는것으로 시작했다. 사용자가 EC2를 런칭할때 인스턴스 패밀리와 Size를 선택할 수 있습니다. 인스턴스 패밀리는 고객의 워크로드에 대해 컴퓨팅 타입을 분류한 것으로서 범용, 컴퓨팅 최적화, 메모리 최적화, 가속화된 컴퓨팅, 스토리지 최적화 등이 있습니다. Size 에는 예시로 Small은 2Core의 vCPU, 4GB Memory, Medium은 4Core vCPU, 8GB Memory등이 있다. 즉, 사용자가 원하는 컴퓨팅 유형, 사이즈를 선택할수 있으며, 운용 도중에도 변.......

[AWS] AWS 클라우드 : 스토리지 [내부링크]

2021/09/30 에 있었던 AWSome Day 컨퍼런스의 내용을 요약한 글 입니다. 해당 글의 모든 사진의 출처는 AWS 입니다. 강의 3 : AWS 클라우드 핵심 서비스 소개 - 스토리지 AWS는 다양한 스토리지 옵션을 제공하고있다. 인터넷상 어디서나 원하는 양의 데이터를 저장하고 검색할수 있는 객체 스토리지가 Amazon S3이다. NAS처럼 여러 사람이 동시에 write 작업을 할 수 있는 공유파일 스토리지로 Amazon EFS가 있습니다. AmazonEBS는 EC2에서 사용하도록 설계된 고성능 블록 스토리지 입니다. 일반적으로 EC2 인스턴스에 대한 영구 저장소로 사용 Amazon S3 S3 는 Simple Stroage Service 의 약자로 객체 수준의 스토리지 입니다. 객체 스토리지.......

[AWS] AWS 클라우드 : 네트워크 [내부링크]

2021/09/30 에 있었던 AWSome Day 컨퍼런스의 내용을 요약한 글 입니다. 해당 글의 모든 사진의 출처는 AWS 입니다. 강의 4 : AWS 클라우드 핵심 서비스 소개 - 네트워크 Amazon Virtual Private Cloud는 줄여서 VPC로 논리적으로 격리되어있는 계정 전용 가상 네트워크 입니다. 이 VPC 안에서 EC2 인스턴스와 같은 AWS 리소스를 생성하여 사용할 수 있습니다. 또한 VPC는 리전 범위의 서비스 이며, 가용 영역에 걸쳐서 사용됩니다. VPC는 IP주소의 범위 선택, 서브넷 생성, 라우팅 테이블 및 인터넷 게이트웨이 구성 등 가상 네트워크 환경을 완벽하게 제어할수 있습니다. VPC 하나에 서비스를 배치할수도 있지만, 개발 및 테스트 환경, 운영, 부.......

AWSomeDay 컨퍼런스 [후기] [내부링크]

목차 AWS 소개 • 컴퓨팅 • 스토리지 • 데이터베이스 • 네트워킹 • 보안 AWSomeDay 이번 컨퍼런스를 통해 구체적으로 어떤 서비스에서 어떠한 기능을 제공하고 있는지 전반적인 틀을 알게 되었다. 1강에서는 전반적인 소개화 클라우드의 개념에 대해 다루면서 시작하였다. 강의를 들으며 요약해둔 글의 링크는 다음과 같다. 사실 클라우드에 관한 책을 한권 읽어본적이 있어 전체적으로 어떤 맥락에서 돌아가고 있는지 흐름은 알았지만, 특정 Amzon이라는 벤더에서 어떻게 서비스를 제공하고있는지는 몰랐었다. 핵심 기술이라 할수있는 컴퓨팅(서버) 에 해당하는 EC2의 데모 플레이 영상까지 포함되 있어 얼마나 빠른시간안에 간단한 서버 인.......

[HTTP] HTTP 메서드 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 4. HTTP 메서드 1. HTTP API를 만들어보자 우리에게 회원 목록 조회, 단일 회원 조회, 회원 등록, 회원 수정, 회원 삭제 기능을 갖는 API를 만들라고하면 URI를 어떻게 설계 해야할까? 아직 사전지식이 없다면 다음과 같은 형태를 생각할수 있다. - 회원 목록 조회 /read-member-list - 회원 조회 /read-member-by-id - 회원 등록 /create-member - 회원 수정 /update-member - 회원 삭제 /delete-member 과연 좋은 설계라고 할수있을까? 설계의 핵심은 리소스 식별 이다! 그럼 과연 리소스는 뭘까? 회원을 등록하.......

[백준][C++] 1947번: 선물 전달 <146> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 DP의 의미를 정하려 노력하였다. DP[i] : i명의 사람이 선물을 교환할때, 교환 가능한 횟수 DP[i] 와 DP[i-1] 의 관계를 찾으려고 계속 노력하였다. 우선 문제의 힌트를 보고 풀어보길 권장한다. 힌트를 보고도 햇갈리다면 그때 다음 나의 글을 읽어보길! 우선 i-1 명의 사람이 있다고해보자. 새로운 사람 T가 들어왔다. 이제 i명이 되었다. 1) T가 임의의 어떤 한 사람이 갖고있는 선물과 교환한다. (이때 임의의 어떤 사람은 원래 자신의 선물이 아닌, 다른이에게 받은 선물이다.) 2) T가 임의의 어떤 한 사람 본인의 선물과 바꾼다.......

[HTTP] HTTP 메서드 활용 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 5. HTTP 메서드 활용 1. 클라이언트에서 서버로 데이터 전송 클라이언트에서 서버로 데이터 전송 클라이언트에서 서버로 데이터 전달 방식은 크게 2가지가 있다. 1) 쿼리 파라미터를 통한 데이터 전송 - GET - 주로 정렬 필터(검색어) 2) 메시지 바디를 통한 데이터 전송 - POST, PUT, PATCH - 회원 가입, 상품 주문, 리소스 등록, 리소스 변경 클라이언트에서 서버로 데이터 전송 4가지 상황 1) 정적 데이터 조회 이미지, 정적 텍스트 문서등을 조회하며, 보통 GET을 많이 사용한다. 쿼리 파라미터 없이 단순.......

[HTTP] HTTP 상태 코드 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 6. HTTP 상태코드 1. 2xx - 성공 200 OK 가장 단순한 상태코드이다. Client에서 어떤 처리를 서버에 요청했을때, 정상적으로 처리되었다면 보통 200을 상태코드로 보여준다. 201 Created 클라이언트의 요청이 성공하여 서버쪽에서 새로운 리소스가 생성되었을때 201로 응답해준다. POST로 신규 리소스 등록을 요청할때 서버 쪽에서 등록하여 URI를 정하고, 클라이언트에게 반환해 주는 컬렉션 방식에 사용된다. 202 Accepted 클라이언트의 요청이 접수되었으나, 아직 처리가 완료되지 않았을때 사용한다. 배.......

[백준][Java] 13460번: 구슬 탈출 2 <147> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 간만에 빡센 구현문제라 JAVA로 풀어봤다. 생각의 흐름 솔직하게 중간에 구현하다 한번 막혀서 다른 분들 풀이좀 참고하였습니다. 원래 처음에는 빨간 구슬과, 파란 구슬을 각각 red, blue 객체로 만들어 2개의 위치를 확인하며 구현할려 했는데, 생각해보니 Queue에 묶어서 집어넣거나, 2번 넣어줘야 하는 귀찮은 부분이 발생하였다. => 따라서 하나의 객체에 red, blue 양쪽 모두의 위치 정보를 저장시켰다. 또한 최소의 횟수를 찾아야 하니 BFS를 수행해야겠다는 생각이 들었다. 보통 구현에서 최단거리면 BFS이다. 처음에는 생각을 잘못하여.......

SQL 첫걸음 [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/9/18 ~ 2021/10/01 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 아무것도 몰라도 된다. 진짜 SQL 입문자를 위한 책 이다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => DB는 어느 분야이든 필수적으로 기본은 공부해야하는 부분이다. 또한 테이블들을 다루기 위한 query문의 기본 공부는 필수이다. 어떤 서.......

[HTTP] HTTP 헤더 - 일반헤더 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 7. HTTP 헤더1 - 일반헤더 1. HTTP 헤더 개요 HTTP 헤더의 header-field를 예전에 설명한적이 있다. 다시한번 확인하고 시작하자. header-field => field-name":" OWS field-value OWS (OWS:띄어쓰기 허용) - HTTP 전송에 필요한 모든 부가정보가 헤더에 포함되어있다. - 예를 들어 메시지 바디의 내용, 바디의 크기, 압축, 인증, 요청 클라이언트 등등... - 또한 표준 헤더가 너무 많다는 단점이 있다. 우선 과거의 분류 기준을 살펴보자. RFC2616은 1999년도 만들어진 과거의 방식이다. 헤더.......

HTML5 노마드코더 강의(카카오 클론) [내부링크]

내돈내고 내가공부하고 내가쓰는 기록입니다. 1. html공부의 시작 원래 난 c언어랑 python만 공부하던중 평...

CSS3 노마드코더 강의(카카오 클론) [내부링크]

내돈내고 내가공부하고 내가쓰는 기록입니다. 1. CSS 공부의 시작 이전에 하던 html의 공부를 아주 간략...

CSS3 Advanced (카카오 클론) [내부링크]

내돈내고 내가공부하고 내가쓰는 기록입니다. 1. CSS3 Advanced의 시작 사실 이름만 거창하지 뭘 엄청 ...

HTML5 실습 (카카오 클론) [내부링크]

내돈내고 내가공부하고 내가쓰는 기록입니다 1. html실습의 시작 대망의 첫 실습시간 이전까지의 빠른 이론...

CSS3 실습 (카카오 클론) [내부링크]

내돈내고 내가공부하고 내가쓰는 기록입니다 1. CSS실습의 시작 저번주 주말부터 시작했으니 css실습시...

CSS3 에니메이션 실습 (카카오클론) [내부링크]

내돈내고 내가공부하고 내가쓰는 기록입니다 1. CSS에니메이션 이전까지 css만 적용해 주었다면 마무리...

카카오클론 결과물 [내부링크]

카카오 클론 실습 결과물 during: 2020/3/24 ~ 2020/4/5 use: html, css, github_desktop result:

Python webscraper (노마드코더) [내부링크]

학기중순쯤? 5/2쯤 완성한 프로젝트인대 기말준비로 생활이 너무 바뻐서 여유가 생긴 오늘 글을 써 봅니다....

JavaScript로 momentum 만들기 [내부링크]

마음먹고 시작하니 2일안에 완성가능한 코스였다. 다만 만드는과정 속에 모든 이론을 이해 한 것은 아니다....

C언어 공부 섹션0 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션1 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션2 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

Python enumerate() 함수와 반복문 [내부링크]

1) 주어진 상황 과제를 하던중 주어진 URl을 BeautifulSoup으로 크롤링 하여 object를 생성후 원하...

C언어 공부 섹션3 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션4 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션5 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션6 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션7 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션8 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

Scrapy와 Selenium 정복 섹션0 (잔재미코딩) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션9 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션10 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

Scrapy와 Selenium 정복 섹션1 (잔재미코딩) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

Scrapy와 Selenium 정복 섹션2 (잔재미코딩) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션11 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

Scrapy와 Selenium 정복 섹션3 (잔재미코딩) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션12 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션13 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

파이썬 2주 완성반 (노마드 코더) [내부링크]

이 후기는 이번 노마드 아카데미 파이썬 첼린지 3기 수료와 더불어 첼린지 기간동안 공부하고 과제를 해나...

C언어 공부 섹션14 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션15 (홍정모의 따배씨) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

Scrapy와 Selenium 정복 섹션4 (잔재미코딩) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C언어 공부 섹션16 (홍정모의 따배씨 완강) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

Scrapy와 Selenium 정복 섹션5 (잔재미코딩) 완강 [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

로또 번호생성기 (C 실습) [내부링크]

아직 미숙한 실력인지라 약간 너무억지로 코드를 짜는것 같기는한대, 그래도 만든거를 올려볼 생각입니다. ...

UP n DOWN 게임 (C 실습) [내부링크]

아직 미숙한 실력인지라 약간 너무억지로 코드를 짜는것 같기는한대, 그래도 만든거를 올려볼 생각입니다. ...

MySQL part1 (생활코딩) [내부링크]

이글의 모든 내용과 사진의 출처는 모두 생활코딩님께 있습니다. 이 글은 재가 공부한것을 올리는 것이며, ...

INSTAGRAM 아이디 @zbqmgldjfh [내부링크]

인스타그램도 자주하는대 구경오실분들은 구경오세요 ㅎㅎ zbqmgldjfh

MySQL part2 (생활코딩) [내부링크]

이글의 모든 내용과 사진의 출처는 모두 생활코딩님께 있습니다. 이 글은 재가 공부한것을 올리는 것이며, ...

MySQL part3 (생활코딩) [내부링크]

이글의 모든 내용과 사진의 출처는 모두 생활코딩님께 있습니다. 이 글은 재가 공부한것을 올리는 것이며, ...

물고기 키우기 게임 (C 실습) [내부링크]

아직 미숙한 실력인지라 약간 너무억지로 코드를 짜는것 같기는한대, 그래도 만든거를 올려볼 생각입니다. ...

파이썬으로 실전 웹사이트 만들기 섹션0 (남박사) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

개발자를 위한 윈도우 셋업 (노마드코더) [내부링크]

개강전 노트북을 분리하여 청소후 서멀구리스도 바르고 공장초기화를 한번 진행하여 순정상태로 만들었다. ...

리눅스 시스템 프로그래밍 섹션1 (ProgCoach4U) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

리눅스 시스템 프로그래밍 섹션2 (ProgCoach4U) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

리눅스 시스템 프로그래밍 섹션3 (ProgCoach4U) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

리눅스 시스템 프로그래밍 섹션4 (ProgCoach4U) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

리눅스 시스템 프로그래밍 섹션5 (ProgCoach4U 완강) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

개발자 스티커 리뷰 [내부링크]

내돈내고 내가사용해보는 리뷰!! 1) 이유 문득 유튜브나 여러 영화같은곳에서 본 개발자 스티커를 나도...

Vim 에디터 (vi 에디터) 사용법 [내부링크]

내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 참고로 저는 WSL2 환경에서 vi를 사용하는 중 입니...

[시스템 프로그래밍] - Process (프로세스) [내부링크]

내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 참고로 저는 WSL2 환경에서 시스템프로그래밍을 공...

[시스템 프로그래밍] - exec 함수들 [내부링크]

내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 리눅스 시스템프로그래밍 2판을 참고하였습니다. 참고...

[시스템 프로그래밍] - fork 함수 [내부링크]

내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 리눅스 시스템프로그래밍 2판을 참고하였습니다. 참고...

[시스템 프로그래밍] - Zombie Process (좀비 프로세스) [내부링크]

내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 리눅스 시스템프로그래밍 2판을 참고하였습니다. 참고...

[시스템 프로그래밍] - wait 함수 [내부링크]

내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 리눅스 시스템프로그래밍 2판을 참고하였습니다. 참고...

삼성 27인치 모니터 구매후기 (S27R350) [내부링크]

내돈내고 내가사용해보는 리뷰!! 1) 이유 진짜 요즘 하루종일 모니터만 보고사는지라, 기존의 작은 노트...

[시스템 프로그래밍] - Parallel CNN [내부링크]

학교에서 수행한 과제를 정리하는 차원에서 적어보는 글 입니다. 문제될시 알려주시면 삭제하겠습니다. Co...

애플워치 SE 구매 리뷰 (언박싱) [내부링크]

내돈내고 내가사용해보는 리뷰!! 1) 이유 이유가 있을리가... 여지껏 애플의 ipad, iphone, ipod, airpo...

C++ 공부 섹션0 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C++ 공부 섹션1 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C++ 공부 섹션2 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C++ 공부 섹션3 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C++ 공부 섹션4 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C++ 공부 섹션5(홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C++ 공부 섹션6(홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C++ 공부 섹션7(홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C++ 공부 섹션8(홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C++ 공부 섹션9 연산자 오버로딩 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

R-value 와 L-value [내부링크]

LearnCpp.com을 읽으며 직접 번역한 본문입니다. 혹 영어에 어려움이 있으신 분들이 있다면 조금이나마 ...

C++ 공부 섹션10 객체관계 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 시간을 들여 배운과정을 복습하기보다는 간결히 공부한 흔적은 남긴다 ...

C++ 공부 섹션11 상속 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가...

오버로딩(Overloading) vs 오버라이딩(Overriding) (in C++) [내부링크]

본인 조차 overload와 override가 다름을 처음 C++배우는 입장에서 구별하지 못하고 있었다. 처음에는 단...

C++ 공부 섹션12 다형성 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가...

C++ 공부 섹션13 템플릿 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가...

C++ 공부 섹션14 예외처리 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가...

C++ 공부 섹션15 스마트포인터 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가...

C++ 공부 섹션16 STL (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가...

레오폴드 FC750R PD 구매후기 (차콜블루) [내부링크]

내돈내고 내가사용해보는 리뷰!! 크~ 디자인 이쁘고, 성능 좋고~ 왜 사람들이 레오폴드 레오폴드 하는지 알...

C++ 공부 섹션17 String (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가...

다전공 결과!! (컴퓨터공학) [내부링크]

드디어 손꼽아 기다리던 다전공 선발의 합격여부를 발표하였다. 우선 결론 부터 말하면 합 격 !! 참고로 다...

C++ 공부 섹션18 입출력 (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가...

C++ 공부 섹션19 Modern C++ (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가...

C++ 공부 섹션20 <완강> (홍정모의 따배씨쁠쁠) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가...

<후기> 홍정모의 따배씨쁠쁠 완강 [내부링크]

내가 공부한것을 올립니다!! 드디어 완강!! 수강기간: 2020/12/22 ~ 2021/01/31 (중간에 다전공 포토폴리오...

뇌를 자극하는 C++ STL (1장. 연산자 오버로딩) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 1...

뇌를 자극하는 C++ STL (2장. 함수 포인터) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 2...

뇌를 자극하는 C++ STL (3장. 함수 객체) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 3...

뇌를 자극하는 C++ STL (4장. 템플릿) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 4...

뇌를 자극하는 C++ STL (5장. STL 소개) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 5...

뇌를 자극하는 C++ STL (6장. 시퀀스 컨테이너) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 6...

뇌를 자극하는 C++ STL (7장. 연관 컨테이너) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 7...

뇌를 자극하는 C++ STL (8장. 알고리즘) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 8...

뇌를 자극하는 C++ STL (9장. 함수 객체) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 9...

뇌를 자극하는 C++ STL (10장. 반복자) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 10...

뇌를 자극하는 C++ STL (11장. 컨테이너 어댑터) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 11...

뇌를 자극하는 C++ STL (12장. string 컨테이너) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 12...

C++로 쉽게 풀어쓴 자료구조 (2장, 배열과 클래스 응용) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 2...

C++로 쉽게 풀어쓴 자료구조 (3장, stack) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 3...

Design and Implement Special Stack Data Structure [내부링크]

해당 본문의 출처는 GeeksforGeeks 입니다. 문제될시 삭제하겠습니다. Question: SpecialStack에 ...

C++로 쉽게 풀어쓴 자료구조 (4장, Queue) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 1) 4...

[HTTP] HTTP 기본 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 3. HTTP 기본 1. 모든 것이 HTTP HTTP (HyperText Transfer Protocol) 원래 HTTP는 html 파일을 주고받기 위한 프로토콜이였지만, 현재는 거의 모든것을 전송하는 프로토콜이 되었다. - HTML, TEXT - IMAGE, 음성, 영상, 파일 - JSON, XML (API) - 거의 모든 형태의 데이터 전송 가능 - 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 HTTP 역사 크게 3가지 HTTP가 주로 사용된다. - HTTP/1.1 1997년도에 나왔으며, 가장 많이 사용하는 버전이다. 또한 학습에 있어 기본이 되는 버전이다. (TCP) - HTTP/2 .......

Head First Design Patterns (해드퍼스트 디자인패턴) [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/8/14 ~ 2021/09/08 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => JAVA 언어정도는 어느정도 알아야 읽을 수 있습니다. 막 문법을 익히신 분들께는 내용이 추상적이라 어려울수도 있을것 같습니다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => 자료구조 만큼 중요한것이 있다면 바로 디자인패턴일 것 이다. 예.......

[Spring] 빈 생명주기 콜백 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 8. 빈 생명주기 콜백 1. 빈 생명주기 콜백 개발자는 의존관계 주입이 모두 완료된 시점을 어떻게 알고 사용할까? 스프링은 의존관계 주입이 완료되면 스프링빈에게 콜백 메서드를 통해 초기화 시점을 알려주는 다양한 기능을 제공한다! 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 통하여 clean up 과정을 갖도록 해준다. 싱글톤 스프링 빈의 라이프 사이클은 다음과 같다. 스프링컨테이너생성 => 스프링빈생성 => 의존관계주입 => 초기화콜백 => 사용 =>.......

[Spring] 빈 스코프 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 9. 빈 스코프 1. 빈 스코프란? 빈 스코프란 말 그대로 빈이 생존할 수 있는 범위(기간)을 의미한다. 지금까지 공부했던, 스프링 컨테이너가 생성될때 같이 생성되서 ~ 스프링 컨테이너가 종료될때 까지 유지되는 범위는 싱글톤 범위이다. 스프링은 다음과 같은 다양한 스코프를 지원하고 있다. 싱글톤: 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범.......

[HTTP] 인터넷 네트워크 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 1. 인터넷 네트워크 1. IP (인터넷 프로토콜) Client가 지정한 주소, IP Address에 데이터를 전달하게 된다. 이때 단위가 Packet이라는 단위로 통신하게 된다. (패킷에는 출발지IP, 목적지IP, 등 이 담겨있다) 패킷이 Client로부터 출발하면 인터넷망 상에있는 여러 라우터들얼 거쳐가면서 목적지 서버까지 도달하게 된다. 서버는 잘 전달받았음을 알리기위해 Client에게 긍정 응답을 해준다. 패킷 교환방식의 장점 네트워크 리소스 점유 시간이 적으므로 나머지 컴퓨터들이 기다리게되는 문제를 해결할 수 있다. 클.......

[HTTP] URI와 웹 브라우저 요청 흐름 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 2. URI와 웹 브라우저 요청 흐름 1. URI URI는 로케이터(locator) 와 이름(name) 또는 둘다 추가로 분류될 수 있다. https://www.ietf.org/rfc/rfc3986.txt - 1.1.3. URI, URL, and URN URI(Uniform Resource Identifier) - Uniform: 리소스 식별하는 통일된 방식 - Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음) - Identifier: 다른 항목과 구분하는데 필요한 정보 URL과 URN URL - Locator : 리소스가 있는 위치를 지정 URN - Name : 리소스에 이름을 부여 (거의 사용 안함) 위치는 변할 수 있지.......

[백준][C++] 1715번: 카드 정렬하기 <145> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 문제를 읽고 바로 든 생각은 가장 작은수 2개를 선택하여 먼저 더한후, 그 결과값을 다시 그룹에 추가해주면 되겠다고 생각하였다. 따라서 우선순위큐를 사용하였으며 min priority_queue를 사용하였다. 일단 원소 2개를 큐에서 뽑는다. 가장 작은수 2개를 뽑게된다. 이 2개의 수를 res라는 결과값 변수에 더한후, 두개의 수를 더한값을 큐에도 추가해 준다. 다음으로 작은수 2개를 뽑을때 뽑혀야하기 때문이다. 나의 코드

[Spring] 스프링 MVC 프레임워크 [내부링크]

공부하며 중요하다 싶은 내용들을 블로그에 공부겸 정리한 내용입니다! 지적 댓글 환영합니다~ 1. 스프링 MVC 핵심 구성 요소 스프링 MVC의 핵심 구성 요소는 다음과 같습니다. 위의 사진을 보면 <스프링 빈으로 등록> 이라 되어있는 부분은 스프링 빈으로 등록되어야 하는 것을 의미합니다. 또한 초록색 박스의 JSP, 컨트롤러는 개발자가 직접 구현해고 스프링 빈으로 등록해야 하는 요소 입니다. 중앙에 위치한 DispatcherServlet은 모든 연결을 담당합니다. Client로부터 요청이 들어오면 DispatcherServlet은 그 요청을 처리하기 위해서 HandlerMapping 이라는 빈 객체를 통하여 컨트롤러를 검색하게 됩니다. (그림에서 2번 과정) Hand.......

[백준][C++] 2306번: 유전자 <143> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 하.. 이게 분명 단위케이스 인 at, gc부터 시작하긴 할탠데.. 우선 DP[i][j]의 의미부터 정하고 시작했다. DP[i][j] : i부터 j번째 까지의 문자열로 얻을 수 있는 최대길이 를 의미한다. 설명을 위해 우리 문제의 예시 1번 을 사용하겠다. 원래 맨 처음에는 i를 고정후 j를 늘려가는 방식으로 구현하려 했다. 다음과 같이 말이다. (0,1), (0, 2), (0, 3) ... (3, 8), (3, 9) ... (8, 9) 와 같은 방식으로 말이다. 문제는 이렇게 하면 (3, 9)와 같은 경우를 확인할때 (8, 9) 와 같은 더 작은 단위의 경우가 확인 되지 않았다는 점 이다. 탐색.......

[Spring] 싱글톤 컨테이너 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 5. 싱글톤 컨테이너 1. 싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리한다. 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트리 라고 한다. 이러한 기능 덕에 싱글톤을 위한 지저분한 코드가 들어갈 필요도 없으며, DIP, OCP, 테스트 등 의 제약사항이 없어진다 할 수 있다! 간단한 테스트 하나 해보자~ 실행시 memberService1, 2 모두 동일한 객체임을 알 수 있다! 2. 싱글톤 방식의 주의점 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테.......

[Spring] 컴포넌트 스캔 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 6. 컴포넌트 스캔 1. 컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지의 AppConfig를 생각하면, @Bean으로 생성할 빈 객체에 대한 정보를 적어줬었다. 하지만 컴포넌트 스캔을 이용하면 빈을 자동 등록할 수 있다. 이전까지의 예제에서는 등록한 스프링 빈이 적어서 수동으로 가능했지, 30개만 되도 수동으로 @Bean을 적어 등록하기는 힘들어진다... 따라서 보통 컴포넌트 스캔을 이용한다. 바뀐 AutoAppConfig는 다음과 같다. @ComponentScan을 추가해주면 설정 파일은 끝난다. 기존의 AppConfig와.......

[백준][Java] 15685번: 드래곤 커브 <144> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 하 일단 문제를 읽어보면 일반적으로 문제풀때 나오는 x, y축과 개념이 다르다... 축이 바뀌어 있는 문제는 습관처럼 풀면 틀리곤 한다... 일단 문제를 풀때 101 * 101 크기의 배열을 사용해야된다는 생각은 들었고, 지도상에 어떻게 그려나갈지가 핵심이였다. 시작 방향과, 세대 의 값이 주어지면 이를 방향값으로 모두 바꿔두는 것이 핵심이였다. 방향값으로 모두 바꿔두면 시작지점에서 방향값만을 읽어가면서 이동하면 되기 때문이다. 다음 그림을 예시로 설명해 보자. 방향을 다 적어놨다. 방향값으로 저장하는 배열을 만드는 코드는 다.......

[Spring] 의존관계 자동 주입 [내부링크]

내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 7. 의존관계 자동 주입 1. 옵션 처리 이번시간에는 옵션처리를 공부하였다. 이는 주입할 스프링 빈이 없을때도 동작하도록 하는 과정이였다. 기본적으로 @Autowired는 required = true 이기 때문에 자동 주입대상이 없으면 오류가 발생한다. 3가지 방식으로 처리가 가능했다. 1) @Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안되는 방식 2) org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 null이 입력된다. 3) Optional<> : 자동 주입할 대.......

[Spring] 스프링 컨테이너와 스프링 빈 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 4. 스프링 컨테이너와 스프링 빈 1. 스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정과 코드를 살펴보자! 다음 코드를 먼저 살펴보자. 애노테이션 기반의 구성 정보를 담고 있는 AppConfig.class가 있다. 이를 사용하여 스프링 컨테이너를 생성할 수 있다. 위의 ApplicationContext는 인터페이스에 해당한다. 따라서 이를 구현한 여러 구현체들이 있다. 그중 우리는 애노테이션을 활용하는 구현체를 선택한 것이다. 이에 관해서 따로 내가 정리해둔 글이 있다. 꼭 읽어보길 권장한다. 이렇게 생성된.......

[백준][C++] 2631번: 줄세우기 <141> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 해결방식을 찾는데 시간이 오래걸린 문제였다... 하 뭔가 앞에서 부터 숫자를 봤을때 이전까지 있는 자신보다 작은 수를 count하면 될것 같기도 하고... 여러모로 생각을 해보았다. 우선 예를 들어보자. { 1, 2, 3, 4, 5 }이 있다고 가정해보자. 이 경우 아이들이 애초에 순서대로 있기 때문에 더 이상 옮겨주지 않아도 된다. 즉, 답은 0이다. 하지만 { 5, 4, 3, 2, 1 } 의 경우는 어떻게 될까? 2,3,4,5 번 아이들을 순서대로 옮기면 순서에 맞게 줄이 이루어 지므로 답은 4가 된다. 여기서 "가장 큰 증가하는 부분수열" 이 생각.......

[Spring] 스프링 핵심 원리 이해1 - 예제 만들기 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 2. 스프링 핵심 원리 이해1 - 예제 만들기 이번시간에는 Spring이 왜 나왔는지 를 이해하기 위해하는 단원으로 잘못된 코드로부터 시작하여 점점 유지 보수가 편한 코드로 바뀌어가는 과정을 확인하는 시간 이였다. 블로그에는 일부 코드들은 생략하여 올리지 않았습니다. 저 스스로 공부 목적을 위한 글이지, 지식 전파의 글이 아닙니다! 1. 회원 도메인 설계 먼저 회원 클래스를 통하여 설계할 구조를 파악하였다. 서비스 인터페이스를 구현한 impl 과 MemberRepository 인터페이스를 만든다. 구현체는 언.......

[Spring] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 1. 새로운 할인 정책 개발 우리의 기획자님 께서 기존에 1000원 씩 할인해주던 정책에서 10%를 할인해주는 정책으로 갑자기 바꾸고 싶다고 한다... 이에 대응한 정률할인정책 을 추가해보자. 구현체를 하나 새로 만들었다! 우리는 RateDiscountPolicy 가 정말 10%가 할인되는지 테스트 해보고 싶다! 테스트 코드를 작성해보면 다음과 같다. (참고: test작성 단축키는 command + shift + t 이다) 테스트가 성공적으로 진행되었다. 2. 새로운 할인 정책 적용.......

[백준][Java] 14891번: 톱니바퀴 <142> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 너무 Java를 추상적 개념들만 공부하다 보니... 문제라도 풀면서 감 유지해야겠다 생각의 흐름 각 톱니바퀴 별로 8칸 짜리 배열을 할당하여 N, S극을 저장하도록 만들었다. 시계 방향과, 반시계 방향으로 회전하는 함수를 각각 구현하였으며, 자신의 양 옆 톱니바퀴에 맞닿는 부분을 파악하는 함수를 따로 구현하였다. 문제의 1번 예시에서 돌아가는 톱니에 대한 input은 다음과 같았다. 3번 톱니를 반시계로, 1번 톱니를 시계 방향으로 한번씩 돌려야 하는 상황이다. 처음 3번 톱니가 돌아야 할때 다음 코드가 먼저 실행된다. index가 3 이니 leftSide(.......

[Spring] SOLID 원칙 (좋은 객체지향 설계의 5가지) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. SOLID 원칙 SRP : 단일 책임 원칙 OCP : 개방 폐쇄 원칙 LSP : 리스코프 치환 원칙 ISP : 인터페이스 분리 원칙 DIP : 의존관계 역전 원칙 SRP (Single Responsibility Principle) 단일 책임 원칙이라 부른다. 한 클래스는 하나의 책임만을 가져야 한다. 하지만 하나의 책임이라는 것이 좀 모호하다. 책임이라는게 클 수도 있고, 작을 수도 있기 때문이다. 예를들어 자동차를 생각해보자. 자동자 전체를 하나의 책임으로 본다면 운전, 트렁트, 좌석 등등 모든 기능을 자동차의 기능으로 보고 하나의 큰 책임이라.......

[백준][C++] 2294번: 동전2 <140> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 간만에 DP 문제 풀려니까... 사라진 감... 일단 DP의 의미부터 정하고 시작했다. DP[a] = b 는 a원 만드는 가능한 사용한 최소의 개수는 b개 이다. 또한 중복된 동전값이 들어올 수 있다고 하였다. 따라서 vector로 받아 중복값을 제거해주는 방식을 이용하였다. 정렬후, unuque를 통해 중복된 값들을 맨 뒤로 옮기고, 중복되지 않은 마지막 부분 초과부터 vec끝까지를 제거하는 방식을 사용하였다. 우리 문제에서 주어신 예시를 통해 설명해 보겠다. 15원 짜리를 만드는데 사용한 최소의 개수는 15-1, 15-5, 15-12 즉! 14, 10, 3원을.......

[Spring] 스프링은 객체 컨테이너다 [내부링크]

공부하며 중요하다 싶은 내용들을 블로그에 공부겸 정리한 내용입니다! 지적 댓글 환영합니다~ 스프링은 객체 컨테이너 이다! 스프링의 핵심 기능은 객체를 생성하고 초기화하는 것 이다. 이와 관련된 기능은 ApplicationContext라는 인터페이스에 정의되어 있다. AnnotationConfigApplicationContext 클래스는 이 인터페이스를 알맞게 구현한 클래스 중 하나다. AnnotationConfigApplicationContext 클래스는 자바 클래스에서 정보를 읽어와 객체 생성과 초기화를 수행하게 됩니다! XML, 그루비 설정코드를 사용하여 객체 생성/초기화를 하는 클래스도 존재합니다. 우선 다음 다이어그램을 살펴보실까요? BeanFactory : 객체 생성과 검색에 대한.......

[백준][C++] 14502번: 연구소 <139> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 풀이 순서는 다음과 같다. 좀 직관적인 풀이라 할수있다. 1. 주어진 입력으로 그래프를 만든다. 2. 조합 알고리즘을 이용해 그래프에 세 개의 벽을 세운다. (0인 지점부터 벽을 하나씩 세우면서 진행) 3. 세 개의 벽을 세울 때마다, 원본 그래프는 냅두고, 벽을 세운 그래프를 복사하여 bfs 알고리즘으로 바이러스를 확산시킨다. 아래 코드에서 simulBFS() 해당한다. 4. 바이러스가 확산된 이후, 안전지대(0)의 수를 세고, 최대값이라면 갱신해야 한다. 나의 코드 아 요즘 너무 간단한 시뮬레이션 문제만 풀고있는것 같다... 다른 종류좀 풀.......

9월 계획, 서늘한 날들과 함께 [내부링크]

무덥던 날이 엇그제 같은데, 벌써 날이 시원해 졌다. 1) 근황 2) 최근 공부 상황 3) 공부 계획 4) 근심 1. 근황 최근에 가평으로 당일치기로 카페를 갔다왔다. 날씨가 비온 바로 다음날이여서 그런지 정말 화창하고도 좋았던 날이다. 내가 정말 좋아하는 날씨와 구름 적당하게 낀 하늘을 볼 수 있었다. 카페 분위기도 너무 좋았고, 벤치에 앉아서 보는 자연이 너무 좋았다. 커피가격이 조금 비싸긴 했지만(아아가 만원....) 경치, 문화 값도 포함되 있다 생각하니 즐겁게 갔다온것 같다. 경치좋은 곳에서 사진도 찍었다. 내가 좀 예전부터 식물과 자연을 좀 좋아하는 면이 있는것 같다. 이번주말에 식물원 가서 하나 구매하여 집에서 키워볼 예정.......

[Design Patterns] Compound Pattern (컴파운드 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Compound Pattern 이란? 일련의 패턴을 함께 사용하여 다양한 디자인 문제를 해결하는 것을 컴파운드 패턴 이라고 부릅니다. 다만 패턴 몇개를 결합해서 쓴다고 무조건 컴파운드 패턴이 되는 것은 아닙니다. 컴파운드 패턴이라면 여러가지 문제를 해결하기 위한 용도로 쓰일수 있는 일반적인 해결책이여야 합니다. 패턴 소개 Compound Pattern의 대표적인 예인 MVC 패턴에 대하여 글을 작성하였습니다. 함께 보실까요? iTunes같은 MP3 플레이어를 사용한다고 해봅시다. 소프트웨어 에서 제공해주는 인터페이스를 사용하여 새로운 노래를 추가.......

[Spring] 스프링 DB 접근 기술 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 6. 스프링 DB 접근 기술 1, 2 단원의 JDBC 노가다 방식은 생략하였습니다. 저도 예전에 JDBC 써써 손수 다 해본적 있으니.. 정리는 생략하는걸로.. 1. 스프링 통합 테스트 이번시간에는 전체적인 Spring 코드를 테스트 하는 시간을 갖었다. 우선 코드를 살펴보자. @Transactional 가장 중요하게 배운 내용은 @Transactional 이다. 테스트 케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. 이렇게 하면 DB에 데이터가 남지 않으므로 다음 테스트에.......

[백준][C++] 14890번: 경사로 <138> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 와... 구현하다 너무 성질났다... 구현 자체가 너무 빡센 문제인것 같다. 시간 제한 있었으면 100% 틀렸을것 같다. 이번 풀이는 사실 설명할 부분은 딱 하나인것 같다. 가로, 세로를 어떤 방식으로 확인할 것 인가? 함수를 2번 구현할 것 인가? 다음 코드를 확인해 보자. 애당초 input 배열을 MAP 에서는 정상적으로 받고, MAP2에서는 가로와 세로를 바꿔 받으면 된다. 주석으로 설명을 추가해 두었습니다. 추가로 저의 코드는 아니지만 숏코드를 하나 추가해두었습니다. 나의 풀이 숏코드

[Spring] AOP (Aspect Oriented Programming) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 7. AOP 1. AOP가 필요한 상황 우리가 작성한 코드에 함수가 1000개 있다고 해보자. 문제는 갑자기 위에서 모든 함수들의 시간을 측정해보라는 명령이 내려왔다는 것 이다. AOP를 아직 모르는 사람은 함수 하나를 다음과 같이 변경하였다. 함수의 시작과 끝에 시간을 측정하고, 이후 finish - start 를 통하여 걸린 시간을 측정하였다. "후! 이제 999 개만 이렇게 더 고치면 되겠군!!" 이방식이 정상적인 방법이라 생각하는가? 문제 회원가입, 회원 조회에 시간을 측정하는 기능은 핵심 관심 사.......

[Spring] 회원 관리 예제 - 웹 MVC 개발 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 5. 회원 관리 예제 1. 회원 웹 기능 - 홈 화면 추가 컨트롤러 하나를 추가해 주었다. 이와 연관된 간단한 홈 화면 html을 하나 만들었다. home.html 이후 브라우저에서 http://localhost:8080/ 로 접속하면 다음과 같은 화면을 볼 수 있다. 단순하게 회원 가입, 회원 목록 버튼 정도만 있다. 여기서 한가지 생각할점이 있었다. 이전에 welcomePage로 index.html을 등록시킨적이 있다. 그런데 왜? 이번에는 index.html이 아닌 home.html로 이동한 것 일까? 스프링은 URL이 들어오면 관련 controller가 있는지.......

[백준][C++] 14500번: 테트로미노 <137> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 처음에는 완전탐색을 생각했는데... 문제는 가능한 모형이 5종류 이며, 각 종류별로 대칭과 회전을 생각하면 종류당 8번 총 40번의 좌표를 생각하고 지정해야 한다는 생각에 이건 아닐꺼야... 아니어야해... 라고 생각하다... 결국 다른 방법을 스스로는 아니지만 다른 글을 보고 알게 되었다. 바로 테트로미노 들의 depth가 4라는 점 이다. 다음 그림을 살펴보자. 보라색 모형 빼고는 전부 DFS 탐색으로 depth 4에 도달할때 끝나는 조건으로 만들면 해결 가능하다. 보라색 모형만 시작지점에 따른 계산을 직접해주면 된다. 나의 코드

[Design Patterns] Proxy Pattern (프록시 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Proxy Pattern 이란? Proxy Pattern - 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴 위의 정의에서 접근을 제어하는 프록시는 어떤 것 일까요? 아래에서 배울 뽑기 기계의 경우 프록시가 원격 객체에 대한 접근을 제어하고 있다고 생각하면 됩니다. 원격 프록시가 접근을 제어해서 네트워크 관련사항들을 챙겨줬다 할 수 이는거죠. 대표적인 접근을 제어하는 방법을 알아봅시다. 원격 프록시를 써서 원격 객체에 대한 접근을 제어할 수 있습니다. 가상 프록시를 써서 생성하기 힘.......

[Spring] 스프링 빈과 의존관계 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 4. 스프링 빈과 의존관계 1. 컴포넌트 스캔과 자동 의존관계 설정 @Controller 스프링 컨테이너가 처음에 생성될때 @Controller 라는 에노테이션이 있으면 그 컨트롤러 객체를 생성해서 Spring IOC에 넣어 관리한다. 이걸 Spring IOC 컨테이너에서 SpringBean에 등록되어 관리된다고 부른다. @Autowired 필요한 의존 객체의 “타입"에 해당하는 빈을 찾아 주입한다. 생성자 setter 필드 위의 3가지의 경우에 Autowired를 사용할 수 있다. 그리고 Autowired는 기본값이 true이기 때문에 의존성.......

처음 해보는 Servlet & JSP 웹 프로그래밍 [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/8/18 ~ 2021/09/03 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => JAVA 언어정도는 어느정도 알아야 읽을 수 있습니다. 막 문법을 익히신 분들께 JAVA 복습겸 보면 좋은것 같습니다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => 웹개발 에서 JAVA 하면 떠오르는 것이 Spring이다. 문제는 이 Spring도 내부적.......

[Design Patterns] State Pattern (스테이트 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! State Pattern 이란? State Pattern - 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다. 이 패턴에서는 상태를 별도의 클래스로 캡슐화한 다음 현재 상태를 나타내는 객체에게 행동을 위임하기 때문에, 내부 상태가 바뀜에 따라서 행동이 달라지게 된다는 것을 알 수 있습니다. "클래스가 바뀌는 것과 같은" 결과를 얻는다는 것이 어떠한 의미일까요? 클라이언트 입장에서 생각해봅시다! 만약 클라이언트가 사용중이던 객체의 행동이 완전히 달.......

[백준][C++] 14499번: 주사위 굴리기 <136> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 확실한건 이문제는 쉽다는 것 이다. 진짜 그냥 문제 그대로 코딩하면 걍 답이 나온다. 하지만 이 글이 나 자랑하고 쓰는 글도 아니고, 문제를 풀때 내 생각을 적어볼까 한다. 우선 보자마자 시뮬레이션 문제라는것은 다들 공감할 것 이다. 나같은 경우 시뮬레이션 문제는 보통 Class로 구조를 잡고 코딩한다. 이번 문제에서는 Dice 라는 class를 만들었으며, 내부에는 left, right, top, down 으로 움직이는 함수를 구현하였다. 또한 class내부 변수로는 주사위 좌표와, 주사위의 각 6면에 갖고있어야 하는 숫자를 저장하고 있다. topN.......

[백준][C++] 1062번: 가르침 <134> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 알파벳의 수는 총 26개이다. 이를 비트벡트를 활용하여 해결하였다. (참고로 비트벡터로 조합을 구하는 방식이 어려워... 조금은 다 구하는 방식으로 해결하였다...) 문제에서 모든 단어는 앞부분은 "anta"로 시작되고, 뒷부분은 "tica"로 끝난다고 하였다. 즉. 이문자들은 무조건 포함해야만 한다. 어떠한 단어든 앞, 뒤에 추가되는 알파벳들은 꼭 배워야만 단어를 읽을 가능성이 생긴다.. 여기서 a, c, i, n, t 는 기본적으로 선택되는 문자들이 된다. 만약 7글자를 가르켰다면, 위의 5글자를 뺀 2글자를 배워야 한다.......

[Servlet/JSP] MVC (Model View Controller) [내부링크]

공부하며 중요하다 싶은 내용들을 블로그에 공부겸 정리한 내용입니다! 지적 댓글 환영합니다~ MVC (Model View Controller) MVC 패턴은 어플리케이션을 3가지 영역, 즉 Model, View, Controller 로 구분하여 작업함으로써, 서로간의 결합도를 최소화 하고 유지보수성을 높이며, 개발자들이 각각 맡은 영역에만 집중할 수 있게 하는 장점이 있습니다. View 클라이언트 와 서버같의 인터페이스 역할을 담당함으로써 클라이언트의 요청을 받거나 처리된 결과를 보여줍니다. HTML, CSS, JSP 드을 사용하여 구현. Controller View 와 Model을 연결하는 중계 역할을 하며, 클라이언트가 전달한 파라미터를 추출하여 Model로 전달하고, 처리 결과.......

[백준][C++] 14503번: 로봇 청소기 <135> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 문제를 처음 봤을때 든 생각은 "로봇청소기를 하나의 class로 만들어야 겠다" 이었다. 그 class의 인스턴스 안에 자신의 위치 정보와, cnt, 방향을 저장해두면서 DFS탐색을 해야겠다고 생각했다. cnt는 청소한 횟수이고, dir은 방향이며, 나머지 는 좌표를 의미한다. 가장 큰 문제는 방향에 따라 바뀌는 다음지점의 좌표였다. 현재 동, 서, 남, 북 어디를 보고있는지에 따라서 다음 장소의 좌표가 바뀔수 있었다. 따라서 방향값을 통해 다음 위치할 곳을 구할 수 있어야 했다. 다음 코드를 살펴보자. 현 위치인 nowX, nowY 에서 어.......

[Spring] 스프링 웹 개발 기초 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 2. 스프링 웹 개발 기초 지난번 환경설정 이후 본격적인 스프링에 대한 입문을 하게 되었다. 이번 시간에는 간단하게 staitc, MVC, API 들에 대한 이해와 간단한 설명을 들을 수 있었다. (이 강의는 전반적은 스프링의 흐름을 잡는 강의이다. 세세한 개별 내용훈 추후 따로 더 공부할 예정이다) 1. 정적 컨텐츠 정적 컨텐츠는 html, 이미지 등 변경이 없는 파일을 말한다. 그냥 파일그래도 내려주는 방식이다. 보통 서버에서 이런 정적파일들은 다른 작업 없이 바로 client에게 반환하여 결과를 보여주곤 한.......

[Spring] 회원 관리 예제 - 백엔드 개발 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 3. 회원 관리 예제 이번시간에는 MVC패턴을 활용하여 간단한 예제코드를 구현해 보면서 감을 익히는 시간이였다. 1. 비지니스 요구사항 정리 간단하게 회원ID, 이름을 저장한다. 기능은 회원 등록, 조회 뿐이다. 또한 데이터 저장소가 아직 선택되지 않았기 때문에 interface를 중심으로 설계 해야한다. 인터페이스로 구현해야 나중에 DB를 변경할때 쉬워진다. 2. 회원 도메인과 리포지토리 만들기 이번시간에는 도메인과 관련된 클래스와 인터페이스를 구현하였다. 우선 회원 정보에 해당하는 클래스부터 확.......

[백준][C++] 2143번: 두 배열의 합 <133> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번 문제는 저번에 풀었던 문제와 99%로 동일한 문제였다. 그럼 이글은 왜 쓰는 걸까? 2가지 이유가 있다. 1) 변수 범위 처음에는 int로 변수들을 잡고 생각없이 풀다. 해결하지 못했다. 생각해보니 합의 값이 int 의 범위를 넘어설 수 있었다. 따라서 long long으로 변수들을 바꿔주자 해결 가능했다. 2) upper_case를 활용한 투포인트 알고리즘 원래는 그냥 투포인터 알고리즘을 구현하여 해결했는데, 다른 분들의 풀이를 보니 upper_case를 활용하여 더욱 간단하게 해결하시길래 나도 사용해 봤다. 우리가 구하려고 하는 값 T에서 front.......

[Design Patterns] Iterator Pattern (이터레이터 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Iterator Pattern 이란? Iterator Pattern - 컬랙션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공 이 패턴을 사용하면 컬랙션 내부에서 어떤 방식으로 일처리가 되는지 전혀 모르는 상태에서 그 안의 모든 원소들에 접근할 수 있게됩니다. 컬랙션 객체안에 들어있는 모든 원소들에 대한 접근방식이 공통되어있다면 어떤 종류의 컬랙션 에서도 사용할 수 있는 다형적인 코드를 만들 수 있기 때문이죠! 또한 반복자(Iterator)를 활용하면 모든 항목에 접근하는 일을 컬랙션 객체.......

[Design Patterns] Composite Pattern (컴포지트 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Composite Pattern 이란? Composite Pattern - 객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만들 수 있습니다. 이 패턴을 이용하면 Client에서 개별 객체와 다른 객체들로 구성된 복합객체(composite)를 똑같은 방법으로 다룰 수 있게됩니다. 패턴 소개 다음과 같이 Iterator 를 활용하여 메뉴를 출력하는 코드가 있다고 해봅시다. 이 코드들은 이전 글인 Iterator 에서 나왔던 코드들 입니다. 기억 하시죠? Iterator를 활용하여 Waitress 와 컬렉션의 구현부를 분리했다는 장점이 있지만, 아직도 코드중복이 3번이나.......

[Servlet/JSP] RequestDispatcher 요청 재지정 [내부링크]

공부하며 중요하다 싶은 내용들을 블로그에 공부겸 정리한 내용입니다! 지적 댓글 환영합니다~ RequestDispatcher RequestDispatcher 객체에서 제공하는 메소드를 이용하여 요청 재지정을 할때는 재지정하는 자원이 반드시 현재 자원과 동일한 웹 어플리케이션에 있어야만 합니다. 우성 재지정 메소드를 확인해 봅시다. 1) forward(ServletRequest request, ServletResponse response) : 요청을 다른 자원으로 넘긴다. 2) include(ServeltRequest request, ServletResponse response) : 다른 자원의 처리 결과를 현재 페이지에 포함시킨다. RequestDispatcher 객체 생성 객체를 생성할때는 다음과 같은 팩토리 메소드를 사용합니다. (객체를 반환.......

[Servlet/JSP] FilterChain, FilterConfig [내부링크]

공부하며 중요하다 싶은 내용들을 블로그에 공부겸 정리한 내용입니다! 지적 댓글 환영합니다~ FilterChain FilterChain은 필터가 실행될 때 doFilter() 메소드의 세번째 인자로 전달되는 객체 입니다. web.xml 파일에서 설정한 <filter-mapping>에 대한 정보를 가지고 있죠! 즉, 클라이언트의 요청에 대한 필터들의 실행순서를 알고있는 객체인거죠. 이렇게 흐름을 제어할 수 있는 객체가 FilteChain 입니다. void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 한글 처리 필터 전달받은 페이지에서 한글 처리를 해야 하는데, 한글이 필요한 페이지들 모두 사전에 필터를 적용하면 일괄적으로 처리가 가.......

[Servlet/JSP] Servlet과 Cookie [내부링크]

공부하며 중요하다 싶은 내용들을 블로그에 공부겸 정리한 내용입니다! 지적 댓글 환영합니다~ Cookie 란? 쿠키란 서버가 클라이언트에 저장하는 정보로서 클라이언트 쪽에 필요한 정보를 저장해 놓고, 필요할 때 추출하는 것을 지원하는 기술 입니다. 클라이언트와 연결이 끊어져도 클라이언트 개인마다 상태정보를 유지하고자 할때 사용하는 기술 입니다. (이는 HTTP의 stateless 한 특성 때문에 사용되는 기술 입니다.) 이후 서버 방문시 요청정보의 헤더에 포함되어 전달됩니다. 쿠키는 name 과 value로 구성된 정보이며, 필요에 따라 쿠키 유지시간, 유효 디렉터리, 유효 도메인 등 속성또한 정할 수 있습니다. 다만 사용자 브라우저에 저장.......

[Servlet/JSP] Session과 login, logout 구현 [내부링크]

공부하며 중요하다 싶은 내용들을 블로그에 공부겸 정리한 내용입니다! 지적 댓글 환영합니다~ Session 이란? HTTP를 이용하여 클라이언트가 서버와 통실할때 서버측에 생성되는 "상태정보"를 세션이라 부릅니다. 세션은 HttpSession 인터페이스로 표현되며, HttpServletRequest의 getSession()을 통해 객체로 생성될 수 있습니다. 세션 객체가 생성될때 요청보내온 클라이언트의 정보, 요청시간, 등을 조합하여 세션ID 가 부여되며, 이 세션ID 는 클라이언트 측에서 쿠키로 저장됩니다. 세션 객체는 서버 측에 저장되며, 이후 사용자가 서버에 접근할때 세션ID를 이용하여 세션 객체에 접근합니다. 로그인/로그아웃 form 작성 우선 다.......

데이터베이스 개론 [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/8/01 ~ 2021/08/22 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 데이터베이스에 대한 지식이 전혀 없는 사람이 처음 접할때 읽으면 좋은 책이다. 나처럼 처음 데이터베이스에 대해 공부하는 입문자들에게 강추하고 싶은 책이다. 내용이 아주 좋다고 생각한다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => 관.......

[백준][C++] 2632번: 피자판매 <132> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 연속된 부분합의 수를 잘 구해야 하는 문제이다. 우선 input 범위가 1000 까지라고 명시되어있으니, 그냥 O(n^2) 방식으로 2중 for문 돌면서 구하는 방식으로 합을 구하면 된다. (ps O(n^2) 알고리즘은 input이 1만까지 안정권 이라 알고있다) 우선 문제에서 주어진 예시를 생각해 보자. 합으로 7을 만들어야 하며, vec1(2, 2, 1, 7, 2) 와 vec2(6, 8, 3) 으로 피자가 나뉘어 져 있는 상황이다. 우선 vec1에서 합으로 나올 수 있는 모든 가능한 경우를 count 해야 한다. 총 원소의 수는 5개이니 최대 4개까지 만 사용하여 가능한 경우의 수.......

[Design Patterns] Facade Pattern (퍼사드 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Facade Pattern 이란? Facade Pattern - 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드에서 고수준 인터페이스를 정의하기때문에 서브시스템을 더 쉽게 사용할 수 있습니다. 퍼사드 패턴에서는 인터페이스를 단순화 시키기위해 인터페이스를 변경합니다! 하나 이상의 복잡한 인터페이스를 깔끔하게 퍼사드 로 덮어주거든요! 더 나아가 쉽게 사용할수 있도록 도와준답니다. 다음 다이어그램을 함께 확인해 보시죠! 클라이언트가 퍼사드 덕분에 정말 편하게 서브시스템들을 사용하고 있군요! 패턴 소개.......

[Design Patterns] Template Method Pattern (템플릿 메소드 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Template Method Pattern 이란? Template Method Pattern - 메소드에서 알고리즘의 골격을 정의합니다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있습니다. 이 패턴은 일련의 단계들(메소드들의 순서) 로 알고리즘을 정의한 메소드 입니다. 메소드들을 어떤 순서로 호출하는지가 알고리즘이라 할 수 있겠습니다! 여러 알고리즘의 단계(메소드) 가운데 하나 이상이 추상메소드로 정의 되며, 그 추상 메소.......

[백준][C++] 2003번: 수들의 합 2 <128> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 수열로 총 가능한 input의 수는 10000개 까지라고 되어있다. 따라서 이 문제는 O(n^2) 의 시간이 걸리는 알고리즘으로도 해결이 가능하다. 직관적으로 떠오르는 2중 for문 방식으로 해결하면 그냥 풀리는 문제이긴 하다. 다만 이 문제는 O(n) 시간에도 해결이 가능한 문제이다. 바로 투포인터 알고리즘 을 이용하면 된다! 나의 코드

[알고리즘] Two Pointers Algorithm (투포인터 알고리즘) [내부링크]

Two Pointers Algorithm 투 포인터 알고리즘은 기본적으로 1차원 배열상에서 배열을 가리키는 포인터 2개를 이용하는 방법 입니다! (포인터 라고 해서 C의 그 포인터를 사용한다는 것 이 아닌, 배열의 어느 한칸을 가리키는 용도로 사용하는 것을 의미합니다) 대표적인 문제로 백준의 2003번이 있습니다. 이 설명을 보기전 문제를 먼저 한번 읽어주시면 감사하겠습니다! 다음과 같은 input이 있다고 가정해 봅시다. 총 10개의 숫자가 있으며, 연속된 수의 합이 5가되는 경우의 수를 구해야 합니다. 우선 포인터 2개를 선정해 봅시다! left, right 라는 포인터 2개를 사용할 예정입니다. 맨처음 두 포인터가 가리키는 배열의 index는 둘다 -1이며.......

[Design Patterns] Command Pattern (커맨드 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Command Pattern 이란? 커맨드 패턴 - 커맨드 패턴을 이용하면 요구사항을 객체로 캡슐화 할 수 있으며, 매개변수를 사용하여 다양한 요구사항을 전달할 수 있게됩니다. 또한 요청 내용을 큐에 저장하거나 로그로 기록할수도 있으며, 작업되돌리기 또한 가능합니다. 우선 커맨드 패턴의 개념부터 알아봐야 겠죠? 코드보기 전에 간단한 이야기 먼저 들려드리죠~ 식당에서 음식을 주문한다고 해봅시다. 주문과정을 요약하면 다음과 같을 것 입니다! 1) 고객이 종업원에게 주문을 합니다. 2) 종업원이 주문을 받고 주방에 주문을 전달합니다. 3).......

[백준][C++] 1806번: 부분합 <129> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번 문제는 투포인트 알고리즘을 활용하면 O(N) 시간안에 해결이 가능한 문제이다! 사람마다 방법이 조금 다르겠지만, 나같은 경우 포인터의 초기 위치값을 -1로 잡는다. 그리고 sum값은 0으로 지정해 둔다. 의미상 [a, b) 를 나타내기에는 두 포인터의 index를 -1로 잡아야 적합하다 생각하기 때문이다. 혹시 투포인터 알고리즘에 대해 아직 모른다면 해당 알고리즘에 관한 설명 먼저 읽어보길 권장하다. 위의 글을 읽었다면 해결책은 쉽게 떠오를 것 이다! 나의 코드

[백준][C++] 1261번: 알고스팟 <130> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번문제를 처음 봤을때 일단 "BFS돌면서 최단거리를 구하는 방식 + 추가적인 아이디어" 라고 생각했다. 무턱대고 BFS만으로 짠 경우 시간안에 해결할수가 없었다. 여기서 막혀 추가적인 아이디어가 뭔지 다른분들의 글을 살펴보게 되었다.. 바로 다익스트라 였다! 다익스트라 알고리즘 자체는 무엇인지 알고있었지만, 다익스트라를 적용해야 겠다는 생각이 들지 않았다는 점이 문제였다. 왜? 다익스트라를 적용해야 했을까? 이유를 알아보자! 우리의 목적은 목적지까지 가는동안 최소로 부신 벽의 수를 구해야 한다. 잠시 문제의.......

[Design Patterns] Adapter Pattern (어댑터 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Adapter Pattern 이란? Adapter Pattern - 클래스의 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다. 인터페이스가 호환되지 않아 사용하지 못하던 클래스들을 사용할 수 있게 해 줍니다. 어떤 프로그램이 있는데, 새로운 업체에서 제공하는 기능을 사용할려고 한다 해봅시다. 하지만 기존 프로그램의 인터페이스와 새로 제공된 클래스의 인터페이스가 일치하지 않아 사용에 어려움이 있습니다. 이럴때 필요한 것 이 Adapter 입니다! 어댑터를 사용하면 기존시스템에서의 요청이 어댑터를 통해 변환되어 새로 업체에서 제.......

[백준][C++] 7453번: 합이 0인 네 점수 <131> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 처음 문제를 읽고 든 생각은 제한시간이 12초나 된다는 점 이였다. 12초?? 12초짜리 제한시간은 처음 접해본지라 너무 여러가지 방식이 생각났다. for문 4번 돌리는 방식만 아니면 해결가능할거라 생각했다. 2중 for문 즉, O(n^2)의 알고리즘들은 최대 4만 정도까지는 1초 안에 해결 가능하다고 알고있다(일반적으로 1만 까지 사용). 따라서 4개의 배열 A, B, C, D를 2개의 team인 front(A, B), back(C, D)으로 나누어 각각 팀별로 가능한 모든 합을 구한후 투포인터 알고리즘을 이용하여 해결할 것 이다. front는 작은수부터 오름차순으로.......

[백준][C++] 1987번: 알파벳 <127> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 [1, 1] 지점을 기점으로 DFS 탐색을 진행해야 겠다는 생각이 들었다. 평소였다면 visited[x][y] 를 이용하여 방문했던 지점의 좌표를 저장해 두겠지만, 이번 문제에서는 사용했던 문자만 저장해 두면 자동으로 방문지점 체크가 되면서 동시에 목표로 하는 중복문자 체크 까지 수행할 수 있다. 알파벳이 총 26개 이니 used[26] 이라는 배열을 이용하여 사용한 문자를 체크해 두었다. 우리의 문제의 예시를 살펴보자. C[1][1]가 시작지점 이다. 여기서 오른쪽의 A지점[1][2]을 방문 한후 방문처리를 해준다. used[MAP[1][2] - 'A&#x.......

[Design Patterns] Decorator Pattern (데코레이터 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용 입니다. 문제가 될시 글을 내리도록 하겠습니다! Decorator Pattern 이란? Decorator Pattern - 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터는 서브클래스를 만드는 방식을 통하여 유연하게 확장하는 방법을 제공한다. 커피 한잔을 주문할때 단순 커피만이 아닌 모카시럽, 휘핑크림 등 을 추가하고 싶을 수 있습니다. 데코레이터 패턴 에서는 우선 커피 객체를 만들고, 이 만들어진 커피 객체를 Mocha 객체로 감싸고, 다시 이 모카커피 객체를 휘핑크림 객체로 감싸면서 Wrapper 형태로 만들어 집니다. 다음 그림과 같이 말이죠! 이제 커피의 가격을 측정하고 싶다면 가장 외각의.......

[Design Patterns] Factory Pattern (팩토리 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Factory Pattern 이란? 1) 팩토리 메소드 패턴 객체를 생성하기 위한 인터페이스 정의하는데, 어떤 클래스의 인스턴스를 만드는지는 서브클래스에서 결정하게 만듭니다. 이 패턴을 사용하면 클래스의 인스턴스를 만드는 일을 서브클래스에서 책임지는 것입니다. 위의 다이어그램을 보면 Creator에는 제품을 갖고 원하는 일을 하기 위한 메소드 들이 구현되어 있습니다. 하지만 제품을 만들어주는 FactoryMethod()는 추상 메소드로 정의되어 있을 뿐 구현되어 있지는 않습니다. 따라서 모든 서브클래스 에서 FactoryMethod()를 구현해 주어야.......

[Design Patterns] Singleton Pattern (싱글턴 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용입니다. 문제가 될 시 글을 내리도록 하겠습니다! Singleton Pattern 이란? 싱글턴 패턴은 간단히 말하면 특정 클래스에 대해서 객체 인스턴스를 하나만 만드는 패턴입니다. 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴입니다. 또한 이 패턴을 이용하면 필요할때만 객체를 만들어 사용하기 때문에 자원낭비를 막을 수 있습니다. 우선 간단한 구조를 살펴봅시다! 이 말이 무슨 의미인지 다음 단락부터 예시를 통하여 설명해 보겠습니다! 패턴 소개 우선 고전적인 싱글턴 패턴은 다음과 같습니다. 위의 코드에서 uniqueInstance 변수는 static 변수입니다. 따라서 하나의 인스턴.......

[백준][C++, Java] 3108번: 로고 <124> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. CPP, Java 풀이 둘다 올렸습니다. 생각의 흐름 우선 처음에 보고 딱 생각난것은 Union Find 방식을 이용하는 것 이다. 진짜 단순하게 겹치면 Union해주고, 이를 반복해서 최종적으로 몇개의 부모가 있는지 파악하면 끝난다고 생각하였다. 그리고 이를 진짜 단순하게 구현하면 끝나는 문제이다. 추가적으로 두 직사각형이 만나는지를 알기 위해 meet이라는 함수를 구현하였다. 이를 그림으로 생각하면 다음 그림과 같다. 위의 그림에 보이는 3가지 경우에서만 두 사각형이 겹치지 않는다고 할 수 있다. 따라서 위의 조건을 활용하여 만나는지? 유무를 확.......

[백준][C++] 1759번: 암호 만들기 <125> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 보자마자 순열구하기 방식이 떠올랐다. DFS를 활용해야 겠다는 생각이 들었다. DFS는 인자를 총 4개 받는다. 1) 몇번째 단어인지? lv 2) 이전에 몇번 단어까지 확인했는지? prev 이전 단어를 확인 안하면 acis, acsi 와 같이 순서가 지켜지지 않는 경우까지 모두 확인하게 되버린다. 3) 모음이 몇개인지? mo 4) 자음이 몇개인지? ja isVowel을 통하여 모음인지 또한 확인해주어야 한다. 나의 코드

[Design Patterns] Strategy Pattern (스트래티지 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용 입니다. 문제가 될시 글을 내리도록 하겠습니다! Strategy Pattern 란? Strategy Pattetn - 알고리즘군을 정의하고 각각을 캡슐화 하여 교환해서 사용할 수 있도록 만든다. 스트래티지 를 활용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다. 이말이 무슨 의미인지 다음 단락부터 설명해 보겠습니다! 디자인 패턴 소개 다음과 같이 오리를 표현하는 class가 하나 있다고 해봅시다. (ps. 간단하게 만 작성한 class 입니다. 실제 코드가 아닙니다!!) 이제 이러한 Duck 을 상속 받는 여러 파생의 오리들을 만들수 있게 되었다!! 문제는 오리들이 날아다닐 수 있.......

[백준][C++, Java] 2580번: 스도쿠 <126> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번 문제 이상하게 어려웠었던 것 같다(?) 우선 문제를 읽고 든 생각은 빈칸을 중심으로 세로, 가로줄 에 없는 숫자를 확인해야 하며, 더 나아가 해당 빈칸이 포함된 3x3 정사각형 안에서도 없는 숫자를 확인해서 3가지 경우 모두 없는 숫자여야만 빈칸에 들어갈 수 있다. 예를 들어보자. 다음 스도쿠 에서 빨간 칸 안의 숫자가 궁금하다고 해보자. 빨간 칸 기준 세로에 없는 수 : 5 가로에 없는 수 : 5 3x3 정사각형에 없는 수 : 5 따라서 해당 칸에 들어갈 수 있는 후보로는 5가 가능하다. 따라서 해당 빈칸의 좌표와, 예상 값을 넘겨주.......

[Design Patterns] Observer Pattern (옵저버 패턴) [내부링크]

Head First Design Patterns 책을 읽으며 정리한 내용 입니다. 문제가 될시 글을 내리도록 하겠습니다! Observer Pattern 란? Observer Pattern - 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다. 옵저버 패턴에서는 일대다 관계로, 1개의 Subject 와 여러개의 Observer로 구성됩니다. 또한 Observer들은 Subject에 의존적 입니다. Subject의 상태가 바뀌면 변경사항을 옵저버 한태 통보해주고, 이 통보에 대하여 Observer는 대응할 수 있습니다. 값을 바꿀수도 있고, 삭제할수도 있습니다. 또한 Observer들은 언제든 그룹에서 추가/삭제 될 수 있습니.......

로지텍 mx master 3 [리뷰] [내부링크]

내돈 내고 구매해서 사용하는 리뷰! 로지텍 mx master 3 요즘 손목이 욱신욱신 거리기 시작하여.. 큰맘 먹고 비싼 마우스를 구매하였다. 원래 최근에 mac mini를 구매하여 트랙패드를 구매할까?? 란 생각으로 일주일은 고민했다. 근대 생각해보니 고민 자체가 웃겼다. 원래 내가 마우스를 새로 사려했던 목적이 손목이 아파서였는데... 정작 그점은 고려 안하고 트랙패드를 생각하고 있었다... 따라서 그냥 버티컬 마우스중 끝판완 이라 불리는 mx master 3를 구매하게되었다. 언 박 싱!! 처음에 딱 봤을때 괴상한 디자인에 적응이 잘 되지 않았다... ㅋㅋ 마우스 하단 부에 간략한 설명이 적혀있엇다. 또한 동글이 포함되어 있어 바로 꼽아서 사.......

[백준][C++] 11399번: ATM <122> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 기다리는 대기시간이 짧으려면 어떻게 해야할까?? 답은 간단하다. 그냥 소요시간이 짧은사람부터 이용하면 된다. 문제에서 줄서있는 시간은 앞에 위치한 사람이 걸리는 시간 만큼이 누적되서 길어지는 것 을 볼 수 있다. 결국 앞에 위치해서 중복되어 더해지는 시간의 값이 최소가 되어야 하는 것이며, 결국 사람마다 소요시간을 기준으로 오름챃순 하여 사용시간이 짧은 사람부터 먼저 이용하면 된다. 추가적으로 정렬후 합 계산을 어떻게 할까? 하다 DP를 이용하여 합을 구하기로 하였다. 사실 input값이 1000이라 O(n^2)의 알고리즘으로.......

[백준][C++] 1744번: 수 묶기 <123> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우리의 목표는 가장 최대값을 만들어야 한다. 우선 수들을 크게 4종류로 분류한다. 음수, 0, 1, 양수 1) 양수 1보다 큰 양수들을 벡터에 담은 후, 오름차순으로 정렬하여 큰수끼리 먼저 곱해서 더해야 더 큰수를 만들 수 있다. 양수의 개수가 홀수이면 가장 작은 양수 1개는 더해야 하고, 나머지는 큰수끼리 먼저 곱하면 된다. 양수의 개수가 짝수이면 그냥 큰 양수 2개씩 곱하면 된다. 2) 1 1은 곱해봤자 더 큰 수를 만들 수 없는 수 이다. 따라서 더해야 하는데, 그냥 1의 갯수를 더해주면 된다. 3) 0 0은 곱해봤자 0을 만들기 때문에 양.......

Java의 정석 [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/07/21 ~ 2021/08/11 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 어떠한 사전지식도 필요 없다. 처음부터 끝까지 상세하게 알려주신다. 간혹 이책이 어렵다 하시는 분들이 있는데, 이는 끈기있게 책을 보지 않아서 그렇다 생각한다. 중간중간 고비가 있을 수 있지만, 여러번 읽어가는 노력을 하면서 읽다보면 도움되는 내용.......

명품 JAVA Programming [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/7/27 ~ 2021/08/04 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 이책은 기본 이론서 이다. 사전 지식이 필요하지 않다. 프로그래밍을 처음 접하는 이들에게 권해주고 싶은 책 이다. 또한 최신 java의 내용을 포함하려 노력하신것 같다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => 자바의 기본적인 문법에.......

[Java] 단어 밀어내기 : 1단계 [내부링크]

https://bibi6666667.tistory.com/m/150?category=977294 를 기반으로 풀어본 문제 입니다. 인터넷을 돌아다니다 Java 연습문제로 풀어볼만한 재미있는 문제가 있어 풀어보는중이다. 단어 밀어내기 코드 구현 실행결과 앱을 처음 실행시키면 run()이 실행 된다. inputWord()를 통하여 input string을 받아 온 후, 이를 changeWord를 이용하여 변형된 모습을 출력해 준다.

[Java] 평면 큐브 구현 : 2단계 [내부링크]

https://bibi6666667.tistory.com/151?category=977294 를 기반으로 풀어본 문제 입니다. 슬슬 jsp랑 디자인패턴 공부 시작해야지~~ 평면 큐브 구현 코드 구현 run() 을 중심으로 흐름을 읽으면 간단하게 이해됩니다! 실행결과 CPP만 하다 자바 쓰려니까 컬렉션프레임워크 사용에 미숙해서 찾아보면서 하고 있다. CPP 이면 간단하게 끝나는데, 뭔가 불편하게 자료구조를 다루는 느낌이다. 예를 들어 배열의 원소에 접근할때 CPP 는 arr[i]처럼 접근하면 되는데, java는 arr.get(i) 이런거 하나 하나가 조금 어색하다...

[백준][C++] 2448번: 별 찍기 - 11 <116> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 어느정도 재귀가 익숙해진줄 알았는데.... 아니였던걸로... 개어려웠다..... 생각의 흐름 일단 딱 보면 재귀적으로 출력해야 하며, 높이가 3인 삼각형이 기본 base인것은 알겠는데... 문제는 n번째 와 n-1번째의 관계를 어떻게 이끌어내야 하는지를 생각하는 과정이 어려웠다. 나 또한 이부분에서 막혀 다른분들의 코드를 보게 되었다. 일단 우리가 만들 재귀함수의 탈출 조건은 알겠다. 높이가 3일때는 더이상 재귀를 진행하지 않고 출력해 주면 된다. 높이가 3인 삼각형을 단위삼각형 이라 부르자 출력에 있어서는 함수로 구현해두었다. 좌표(x, y) 를.......

[알고리즘] Counting inversions [내부링크]

Counting inversions 예를들어 배열A에 1, 2, 3, ... n 의 수가 무작위 순서로 들어있다고 해보자. 이 수들에서 2개의 무작위 수를 생각했을 때, 그 순서 대비 크기가 역전되어 있는 두 수의 쌍이 몇개가 되는지를 구해보자. 예를 들어 A {2, 3, 6, 4, 1, 7}이 있을때, 크기가 역전된 쌍은 (2, 1), (3, 1), (6, 4), (6, 1), (4, 1) 이 있다. 따라서 Inversion 된 쌍의 수는 5개 이다. 이런 Inversion된 쌍의 수를 어떻게 구해야 할까? 직관적으로 떠오르는 직접다 for문 돌면서 확인하는 방식은 O(n^2)이 걸릴것이 눈에 훤하다... 이럴때 Merge Sort를 활용하면 O(nlogn)에 가능해진다. Merge Sort Merge Sort를 진행하는 과정에서 교차점의 개수.......

[백준][C++] 1517번: 버블 소트 <117> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 Inversion counting에 관한 문제로 풀이가 몇가지 정해져있는 문제였다. mergeSort를 활용하거나, 세그먼트 트리를 활용하면 될탠데 ... 문제는 세그먼트 트리는 아직 명확히 이해하지 못하여 mergeSort를 활용하였다. 위의 Counting Inversion에 관한 설명을 꼭 일어보길 권장한다. 위의 글이 이문제의 해설이라 할 수 있다. 나의 코드

[백준][C++] 2293번: 동전1 <118> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 DP[a] = b에 대한 정의부터 하고 시작하자. DP[a] = b 는 a원 만드는 가능한 경우의 수는 b개 이다. 우리의 문제에서 주어진 예시를 생각햅 보자. 1원 2원 5원이 가능한 동전들 이다. 이를 사용하여 10원을 만드는 경우인 DP[10]의 값을 구해야 하는 것 이 우리의 목표이다. 예를 들어 DP[6]의 값, 즉 6원을 만드는 경우의 수를 구한다고 가정해 보자. DP[6] == DP[5] + 1원짜리 1개 DP[6] == DP[4] + 2원짜리 1개 DP[6] == DP[1] + 5원짜리 1개 위와 같이 3가지 경우가 가능해 진다. 즉 DP[6.......

[알고리즘] Sweeping Algorithm (라인 스위핑 알고리즘) [내부링크]

Sweeping Algorithm 라인 스위핑 알고리즘은 무엇일까? 사실 개념 자체는 매우 단순하다. 공간이나 직선 상에서 한쪽 시작점을 기준으로 반대편 종료지점 까지 scan하면서 지나가는데, 한 번만 전체 공간을 스캔하면서 마주치는 요소들에 대해 판단기준이 되는 기준 을 적용해 주면 정답이 구해지는 형태입니다. 이처럼 알고리즘의 구조 자체는 간단합니다. 즉, 스위핑 알고리즘 문제들은 정렬된 요소들을 한 번만 순회하며 연산하면 정답이 나오게 구현하게 해야한다. 대표적인 문제로 백준의 선 긋기 문제가 있습니다. 이 문제를 배열을 20억 칸이나 잡아서 해결하려 들면 풀수가 없습니다. 일단 input으로 주어진 선들을 pair로 저장하여 vect.......

[백준][C++] 2261번: 가장 가까운 두 점 <119> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 아 이번문제 너무어렵다...... 생각의 흐름 이번문제는 2가지 방식으로 구현이 가능한데, 라인 스위핑 알고리즘 or 분할정복으로 해결이 가능했다. 분할정복에 대한 개념은 있는 상황이라, 좀더 처음 접하는 개념인 라인 스위핑 알고리즘으로 접근하였다. 다음 글은 내가 정리해둔 라인스위핑에 대한 설명이다. 먼저 읽어보시면 도움이 될수도! 우선 좌표를 저장하기위한 용도로 set을 사용할 것 이다. Set 은 중복되는 원소를 허용하지 않으면서 정렬하며 내부적으로 RedBlack-Tree로 구현된 자료구조다. 따라서 O(nlogn)에 삽입과 탐색이 가능하다. 우.......

[백준][C++] 1520번: 내리막 길 <120> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 다행이 이번문제는 다른 분들의 풀이를 일절 참고하지 않고 해결할 수 있었다. DP랑 DFS, BFS에는 어느정도 익숙해진 것 같다. 한가지 조금 막혔던 부분은 처음에 배열을 0으로 초기화 해서 timeout이 발생하였다. 이는 배열을 -1로 초기화 해 준후 해결하였다. 이에 대한 설명은 밑에서 하겠다. 우선 주어진 문제의 input값을 확인하였다. 지도의 가능한 최대 크기는 500x500 으로 총 250000 칸이 존재할 수 있으며, 여기서 각 칸마다 이론상 4방향으로 이동이 가능하니 4의 250000 승 이라는 어마어마한 숫자가 나오게 된다. 이때 딱 느꼈.......

[백준][C++] 1931번: 회의실 배정 <121> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이전에도 이런 문제를 풀어본 기억이 있는것 같다. 내 경험상 시간들이 주어지고 가장 많이 참여하도록 하는 문제는 항상 끝나는 시간이 중요했다. 따라서 이문제를 보자마자 끝나는 시간 기준으로 정렬해야 겠다는 생각이 들었다. 하지만 이렇게만 설명하면 내 자랑글도 아니고 의미가 없으니... 이유를 설명해 보면 시작시간이 언제이든 종료가 빨라야 다음 회의를 진행할 수 있다. 이게 끝이다... (2, 13) 동안 하는 회의 보다는 (2, 4)처럼 빨리 끝나야 다음 회의를 진행할 수 있다. 따라서 끝나는 시간 기준으로 오름차순으로 정렬하고.......

[백준][C++] 8986번: 전봇대 <112> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번 문제는 3분탐색을 이용하면 해결할 수 있다. 우선 문제가 3분탐색으로 해결 가능한지를 확인하기 위해서는 함수의 형태를 확인해야 할 것 이다. f(x) : 전봇대 사이의 거리를 x로 지정할때, 총 옮겨야 하는 거리의 합 초기 전봇대의 좌표를 d0, d1, d2, ..., d(n - 1)이라고 하자. 이웃된 전봇대의 거리를 일정하게 x로 맞춘다고 가정하면, 이때의 좌표는 0, 1 * x, 2 * x, ..., (n - 1) * x로 표현이 가능하다. 따라서 이동거리함수 f(x)는 다음과 같이 표현가능하다. f(x) = | x - d0 | + | 2 * x - d1 | + ... + | (n - 1) * x.......

[백준][C++] 1780번: 종이의 개수 <113> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 딱히 어렵진 않았고, 재귀를 잘 적용하기만 하면 풀리는 문제였다. 재귀를 나눌 때 마다. 탐색을 시작할 지점의 좌표를 인자로 념겨주었으며, 탐색할 변의 길이또한 인자로 넘겨주었다. 재귀함수는 다음과 같은 구조를 나타낸다. 우선 x, y 지점을 중심으로 n만큼 떨어진 정사각형의 범위에 모두 같은 수로 이루어져있는지를 확인한다. 여기서 모두 같은 수로 이루어져 있다면, 해당 숫자 counter를 1만큼 증가시켜주면 된다. 만약 모두 같은 수로 이루어진것이 아니라면, n/3의 크씩 갖는 정사각형 9개로 나누어 다시 Recur를 진행해주면 된.......

[백준][C++] 1992번: 쿼드트리 <114> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 음 딱히... 어렵지가 않아서.. 그냥 생각나는대로 쭉 코드 적으니까 통과했다. 간단하게 각 함수에 대한 설명만 적어두겠다. 1) bool Check(int x, int y, int n) 배열의 x, y를 시작점으로 오른쪽으로 n칸, 아래로 n칸의 nxn 사이즈의 배열이 다 같은색일 경우 true를 반환하고 만약 다른색이 같이 있다면 false를 반환한다. 2) QTree(int x, int y, int n) 실질적인 탐색 함수이다. 우선 넘겨준 시작 좌표(x, y)를 기준으로 현 상태의 지도가 단 하나의 수로 표현가능한지를 확인한다. 이후 하나의 수로 표현할 수 없다면, 우선 '(&#.......

[백준][C++] 5014번: 스타트링크 <115> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 최소의 count수를 구해줘야 하니 BFS 탐색을 구현하기만 하면 끝나는 문제이다. 출발 층인 S층부터 count 0으로 시작하여 아래로 D칸, 위로 U칸을 추가하면서 Queue에 삽입해주면 된다. 단순 BFS의 구현이니 자세한 설명은 생략하겠다. 나의 코드

[백준][C++] 11662번: 민호와 강호 <111> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 이 문제에 대한 좀 상세한 해설을 올리신 분이 없는 것 같아서, 내가 좀 자세하게 글을 작성해 보겠다. 생각의 흐름 이번 문제는 3분 탐색을 처음 접해봤기에 어려웠던 것 같다. 문제를 풀면서 언제 3분 탐색을 적용해야 하는지에 대하여 알게된 것 같다. 문제에서 주어진 거리를 시간t 에 대한 함수로 표현하면 다음과 같은 것 이다. 즉 일정한 시간이 지나면서 민호와 강호의 위치는 계속 변할 것 이고, 이 둘의 위치가 변함에 따라 둘 사이의 거리 또한 변할 수 있다. 여기서 우리는 가장 거리가 최소가 되는 지점을 구해야 한다. 위의 그레프로 치면.......

[알고리즘] lower_bound, upper_bound (C++) [내부링크]

조건 : 탐색을 진행할 array, vector는 오름차순으로 정렬되어 있어야 한다. lower_bound lower_bound(3)을 진행하고 싶다. 배열 arr의 첫 시작지점 부터 탐색하면서 처음으로 3이 나오는 배열의 위치(Iterator)를 반환한다. 위치를 반환한다고 한 이유는 lower_bound의 반환형은 Iterator 이기 때문이다. 실제로 몇 번째 인덱스인지 알고 싶다면, 아래 코드와 같이 lower_bound 값에서 배열 첫 번째 주소를 가리키는 배열의 이름을 빼 주면 된다. upper_bound upper_bound도 lower_bound와 똑같다. 다만 처음으로 숫자가 발견되는 곳의 iterator가 아닌, 마지막으로 발견되는 곳 다음칸의 iterator가 반환된다. 6이 마지막으로 나오는 index는.......

[백준][C++] 10816번: 숫자 카드 2 <110> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 정렬을 한 후, 해당 원소가 존제하는 지 파악하는 것은 이진탐색을 하면 금방 해결할 수 있었다. 문제는 총 수를 count해야 하는데 있었다. 하나하나 노가다 뛰는 방식으로 하면 구할수야 있었겠지만... 다른 방법을 찾아보게 되었으며 여기서 lower_bound, upper_bound의 존재에 대하여 알게되었다. 위의 글을 내가 정리해둔 내용이다. 위의 내용을 먼저보면 이번 문제는 금방해결할 수 있다. 나의 코드

[백준][C++] 2110번: 공유기 설치 <109> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 input으로 받은 직선상의 좌표들을 sort하여 오름차순으로 배열해 둔다. 문제를 보면 두 공유기 사이의 거리를 최대로 하는 값을 구해야 하니, 거리값을 이진탐색 해야겠다는 생각이 들었다. 그럼 과연 거리의 최소값과 최대값을 몇부터 시작할까? 최소 거리야 당연히 1 일거고, 최대는 input으로 받은 좌표중 가장 멀리 떨어져 있는 곳의 좌표에서 시작지점을 뺀 값이다. 이제 이분 탐색을 들어갈 준비가 다 되었다. left = 1, right = vec[N-1] - vec[0] (예시에서 right는 8) 으로 되어있다. 예시 1번을 봐보자. mid &#x3.......

[백준][C++] 1654번: 랜선 자르기 <108> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이분탐색 알고리즘 자체를 너무 간만에 접해서 방식이 딱 생각이 안나서, 예선에 내가 풀었던 이분탐색 문제 하나를 다시 보면서 해결하였다. 이분탐색의 핵심은 다음과 같다. 1) 우선 문제의 답이라 생각되는 것을 사전에 정한다. 2) 우리가 가정한 답과 input값을 비교한다. 3) 우리의 답이 클 경우, 우선 정답으로 간주. 재귀 진행 4) 우리의 답이 작을경우, 정답이 아님. 나머지 부분 재귀 진행 우리의 랜선의 길이의 최소값은 1부터, 최대값은 input으로 받은 랜선의 길이들 중 가장 긴 길이 로 시작할 것 이다. 문제의 예시인 다음 in.......

[백준][C++] 10799번: 쇠막대기 <107> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 방식을 이해하면 구현은 쉬운문제다. 문제는 방식이 딱 떠오르진 않더라... 우선 예시를 보고 바로 느낀점은 "()" 에서 ( 과 ) 이 연달아 붙어 존재한다면, 이부분이 레이저에 해당되는것은 바로 인식됬다. 쇠 막대기 같은 경우 연달아 나오는 ()과 같은 경우가 아닌 ( ( ~~~ ) ) 의 경우 처럼 ) 다음에 또 )가 나오면 쇠 막대기의 끝부분에 해당함을 알 수 있었다. 문제는 이걸 어떻게 count 하지? 였다. 이 부분이 생각이 딱 나지 않아 다른 분들의 풀이를 참고하게 되었다. 우선 ((())) 과 같은 예시가 있다고 해보자. 처음 ( .......

7월 계획, 너무 더운 한여름... [내부링크]

하 진짜 요즘 너무 덥다....... 왤캐 더운건지... 망고나 좋아할것 같은 온도이다.... 1) 근황 2) 당분간의 공부 계획 근황 최근 화이자 백신을 맞게 되었다. 아직 2차 접종은 하지 않았지만, 2차도 곧 접종할 예정이다. 진짜 코로나가 얼마나 더 오래갈지... 원래 내 생각으로는 내년 초부터는 좀 상황 좋아질 줄 알았는데, 이젠 아닐수도 있겠다는 생각이 든다... 최근에 이태원에 크로플도 먹으러 갔다!! 내가 좀 카페인 없이는 못사는 쪽이라... 맛난 커피를 항상 찾아 주말마다 어슬렁 거리는 것 같다. 흡연은 안하는데, 카페인은 없으면 잠이 너무온다... 진짜 커피 수열은 필수이다. Java 공부 계획 Java 공부를 시작 하게 되었다. 총 4단.......

[백준][C++] 9012번: 괄호 <106> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 최근 계속 완전탐색 문제만 풀다보니 머리가 아파.... 좀 쉬운 문제를 선택하게 되었다. 이 문제는 간단하게 '('가 들어오면 stack에 push해주고, ')' 이 들어오면 우선 stack이 비어있는지 확인후, 비어있지 않다면 stack에서 하나를 pop 해주고, ')' 이 들어올때 stack이 비어있다면 NO를 출력해주면 되는 간단한 논리이다. 나의 코드

클라우드 세상 속으로 [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/07/08 ~ 2021/07/16 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 중간 중간 데이터베이스의 에서의 기본적인 용어들이 등장할 때가 있다. 데이터베이스 기본이 있으면 더 좋다. 또한 파이썬 경험이 있으면 책 중간에 아주 아주 아주 가끔 나오는 코드 부분을 이해할 수 있다. 그 외에 클라우드에 관해서는 하나도 몰라도 된.......

[백준][C++] 1525번: 퍼즐 <103> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 BFS 문제중 어려운편에 속하는 문제였다. 상하좌우를 방문해야 하는데, 그때마다 배열의 값을 교환해 버리면 다음 Queue에 담긴 좌표에서의 교환을 실행할때 영향을 받기 때문에 어려웠다. 그렇다고 모든 Map을 계속 저장할수도 없는 일이고... 어떻게 해결해야 하지? 고민끝에 다른 분들의 글을 조금 살펴보게 되었다.... string을 활용하는 방법을 사용하더라. 일단 시작 string Start와 우리가 도달해야 할 string End를 각 각 받는다. Start 에는 103425786 이 End 에는 123456780 이 담겨 있다. Start에서 End로 바뀌어야 한다. 우선 S.......

[백준][C++] 2251번: 물통 <104> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이상하게 문제에서 뭘 구하라는건지 잘 이해 못했던 문제... 그니까 결론적으로 A, B, C에서 A가 0일때 가능한 C의 물 양을 모두 구하라는 문제 이다. 각각의 물양을 a, b, c라고 하고, 한계치를 A, B, C라고 하자. 시작은 0, 0 C 만큼의 물양에서 시작하게 될 것 이다. 여기서 가능한 경우는 C->A 로 물을 주는 경우, C->B로 물을 주는 경우 2가지가 있다. C->A의 경우 a+c의 물 양이 A의 한계치를 넘어선다면 A는 가득 차고, C에 물이 조금 남을 것 이다. 이는 (A, b, a+c-A) 와 같아진다. a+c의 물 양이 A보다 작거나 같다면 (a.......

[백준][C++] 2186번: 문자판 <105> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 하 개어렵다... 진짜 어려웠다... 처음에 문제를 보고 매우 거슬리는 문구를 발견할 수 있었다. 같은 칸을 여러 번 방문할 수 있다 이말은 즉, visited 배열을 사용하여 방문여부를 확인할수 없다는 것 이며, 이는 중복 case가 엄청 늘어날 것을 말해주고 있다. 처음에는 input으로 받은 문자열의 길이를 넘어가면 끝나도록 구현하였는데, 이렇게 해도 확인해야할 경우가 너무 많다. 이걸 어떻개 해결해야할지 스스로 생각해내지는 못했고... 결국 다른 분들의 풀이를 확인하게되었다. 그렇게 하여 발견한 것이 DP였다. DP이놈이 여기에도 적.......

[클라우드] 실행할 때 고려할 사항들 (8장, 클라우드 세상 속으로) [내부링크]

클라우드 세상 속으로 라는 책을 읽으며, 중요한 내용은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 8.1 클라우드 업체 선택 클라우드 업체를 고르는 것은 중요한 결정 사항이다. 결정에 있어 중요한 고려사항들을 살펴보자. 1) 사업적인 고려사항들 - 재정적인 생존 능력: 판매 회사가 얼마나 오랫동안 사업을 해왔는가? 재정적으로 안정적인가? 이윤을 내고 있는가? - 운영 능력: 여러 개의 데이터센터와 가은 핵심 자산을 소유하고 있는 적절한 곳에 위치하고 있는가? 만족한 고객들에 개한 참조를 제공할 수 있는가? 서비스 제공자로서의 운영 이력을 가지고 있는가? - 계약 실행력: 운영에 대한 감사를 받고 있으며, 서비스 지향의 모.......

[알고리즘] 에라토스테네스의 체 (소수 판별법) [내부링크]

에라토스테네스의 체 (Sieve of Eratosthenes) 이 방식은 지정됨 범위네에서 대량의 소수를 한번에 구할때 유용하다. 예를 들어 121 이하의 소수를 모두 구해야 한다고 해보자. 어떻게 해결해야 할까? 결론부터 말하면 121의 제곱근, 즉 11 이하의 소수 n에 대하여 n의 배수들은 전부 제외시키면 된다. n의 배수라는 말 자체가 소수가 아니다. 아직 이해가 잘 안갈 수 있다. 다시 설명해 보자. 121의 제곱근인 11이하의 수 들을 생각해보자. 일단 2는 소수니 제거하지 않는다. 2를 제외한 모든 2의 배수 4, 6, 8, 10, ..., 120 에 해당되는 수들은 전부 제거하면 된다. 이들은 소수가 아니다. 3를 제외한 모든 3의 배수 6, 9, 12, ... 에 해당되.......

[백준][C++] 9019번: DSLR <102> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 BFS를 통하여 간단하게 해결할 수 있는 문제였다. 나는 Queue에 (현재 숫자, 연산법 문자) 을 쌍으로 넣어서 관리하였다. 연산법 에 해당하는 문자는 D S L R 중 하나가 된다. 현재 숫자는 int형으로, 연산법은 string형으로 관리하였고, visited라는 배열을 만들어 재방문 하지 않도록 구현하였다. BFS를 탐색하면서 새로운 수에 도달할때 마다 4가지 가지를 치면서 나가면 된다 D S L R 가지를 모두 뻗어 먼저 답에 도달하면 return하면 된다. 나의 코드

우아한형제들 개발자 채용설명회 [후기] [내부링크]

유튜브 를 통하여 이번 온라인 라이브 설명회를 듣고 몇가지 메모하기 위해 짧은 글을 작성합니다. 문제될시 삭제하겠습니다!! 목차 우선 배달의 민족의 핵심역할을 담당하는 딜리버리프로덕트, 배민셀프서비스 팀과 더불어 최근 1년정도 전부터 개설된 선물하기 팀의 설명이 먼저 진행 되었다. 이후 마지막 에서 진행된 인재영입팀의 설명회가 나의 주 목표였다. 인재영입팀이 안내하는 우아한형제들의 채용 1) 체용 Process 서류(지원서, 코딩테스트) -> 1차 실무 면접 (약 1시간) -> 2차 임원면접(약 1시간) 실무면접에서는 배달의 민족에 지원자가 얼마나 적합한지를 판단한다고 하셨다. 채용 과정까지의 기간은 평균 1.5개월 이며 길.......

[클라우드] 클라우드 규모에 맞는 높은 안정성 확보 (6장, 클라우드 세상 속으로) [내부링크]

클라우드 세상 속으로 라는 책을 읽으며, 중요한 내용은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 6.1 클라우드 선구자로서의 SOA 1) 분산 시스템 분산 시스템에 대한 가장 중요한 핵심은 분산되지 않은 시스템에 비해 장애단일점 이 없다는 사실이다. 즉 일부분의 고장으로 인하여 시스템 전체가 멈추는 일이 없다. 2) 낮은 상호의존성 낮은 상호의존성은 다른 모든 개체들과 독립적으로 동작하는 각각의 컴포넌트들이 별도로 분리되어 구축되고, 테스트되고, 교체될 수 있다는 것이기 떄문에 안정성에 영향을 주게 된다. 장애가 발생하는 상황에 대해 스스로 또 다른 문제를 일으키지 않고 장애상황을 직면하거나, 다른 곳에서 돌아가.......

[백준][C++] 1963번: 소수 경로 <101> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 소수판별을 먼저 해야하는데 이는 떠오르는 방법이 노가다 뿐이였다. 구글링을 해본결과 에라토스테네스의 체 라는 소수를 판별하는 방식이 있었다. 이 알고리즘은 O(N*1/2) 를 보장한다고 한다. 에라토스테네스의 체 자체를 여기서 설명하긴 좀 아닌것 같으니, 따로 글로 작성후 링크를 걸어두겠다. 이렇게해서 소수를 다 구해놨다고 해보자. 이제 남은일을 BFS탐색을 돌면서 타겟에 접근하면 return을 하면서 lv값을 반환해주면 된다. 우선 시작숫자를 기준으로 1의 자리에 0 ~ 9 까지를 대입하여 nextnum을 만들고 이 nextnum이 범.......

[클라우드] 클라우드 규모에 맞는 디자인과 아키텍처 (5장, 클라우드 세상 속으로) [내부링크]

클라우드 세상 속으로 라는 책을 읽으며, 중요한 내용은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 5.1 클라우드와 가장 잘 어울리는 고확장 어프리케이션 패턴 1) 이전 이전이란 사용 중인 설치형 어플리케이션을 클라우드에 그대로 옮겨 놓는 것을 말한다. 사용중인 로컬 데이터센터에서 이미 완전한 가상화를 통해 사용성을 극대화 해 놓은 상황이 아니라면, 자체적으로 이러한 어플리케이션들을 운영하는 것 보다는 클라우드 자원을 활용하는 것이 더 저렴하다. 2) 인터넷 규모 인터넷 규모 디자인 패턴은 서비스 첫날부터 실제 엄청난 비용을 들이지 않아도, 유튜브, 페이스북 과 같이 굉장히 많은 사용자들을 감당할 수도 있는 클.......

백준 Gold 달성! [내부링크]

드디어 Gold 달성!! 원래 인프런에서 코테 강의를 듣고있던 것 이 있어서 백준을 풀기 시작한것은 얼마되지 않았다. 내 블로그 글 기준 2021/3/12 에 첫 백준 문제를 풀었으니, 오늘이 2021/7/14 니까 약 4달 이다. 하지만 중간에 약 한달 은 컴퓨터와 인터넷이 아예없는 곳에서 생활할일이 있어 전혀 문제를 풀지 못했으니 gold 달기까지 정확히 딱 3달 걸린 것 같다!! Gold 찍고 느낀점 우선 Gold 찍기 전에 처음 백준을 풀때의 느낌을 이랬다. => 아는게 1도 없는 말하는 감자 상태이다. 이후 Gold를 찍고 난 후 이런 생각이 들었다. => 아직도 아는게 1도 없는 말하는 감자 상태이다 (싹이 난 감자정도 랄까?). 생각보다 크.......

[백준] 2229번: 조 짜기 <98> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 어어어어어ㅓ 다른푼들 풀이 일절 참고 안하고 푸느라 한문제에 2시간 이나 걸렸다 ㅠ.ㅠ................. 아 내 멘탈........... 우선 DP[a] 의 의미부터 정하고 시작하자. DP[a] : a번째 학생까지 확인했을때의 최대점수의 합 DP[a] 를 구하기 위해서는 더 작은 부분에서의 해를 이용해야 한다. 예를 들어 DP[5]를 구한다고 해보자. DP[5]를 구하는 방법은 다음과 같다. DP[4] + 5번 혼자조 : 4번 학생까지 확인했을때의 최대점수 값에 + 5번 학생 혼자 조를 이루었을때의 값(0) 을 더하면 된다. DP[3] + (4, 5) 한조 : 3번 학생까지 확.......

[백준][C++] 10971번: 외판원 순회 2 <99> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 배열의 N의 범위가 10이하 인것을 보고 그냥 인접행렬로 graph를 구현해야겠다는 생각이 들었다. 또한 모든 정점을 기준으로 한번씩 DFS 를 진행한후, 이중 가장 값이 작은값이 정답이 될것이였다. 가장 중요한 DFS 는 다음과 같다. DFS의 인자로 현재 몇번 정점에 있는지를 알기위한 num, 비용이 얼마나 들고있는지를 저장해갈 cost, 현재 DFS의 깊이가 얼마인지를 나타내는 lv (lv는 현재까지 몇군대를 방문했는지를 표현 한다고 생각해도 된다.) 이후 lv-1이 되었을때. 즉 마지막 집까지 방문했을때 시작점과 연결되어있는지를 파악.......

[백준][C++] 1697번: 숨바꼭질 <100> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 뭐 딱히 생각하진 않았다. 최단길이를 구하랬으니 BFS가 가장 먼저 떠올랐으며, -1, +1, *2 에 대하여 각각 BFS를 진행하다 가장 먼저 도달할때 return해주면 끝이다. 이렇게 간단한 문제를 그럼 난 왜 기록하느냐? 다른 부분에서 주의해야할 경험을 얻었기 때문이다. 맨처음에 나는 런타임 에러로 outOfBound가 발생하였다. 말그대로 어떤 컨테이너의 범위를 넘어갔다는 의미이다. 첫번째 제출한 나의 코드에서는 +1을 진행하는 부분이 다음과 같았다. 처음에 그냥 봤을때는 틀린부분이 없는 것 같았다. 하지만 원인은 이곳에 있었다! if조.......

[백준] 11052번: 카드 구매하기 <95> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 DP 문제인것이 감은 바로와서 DP를 정의 하였다. DP[a] : 카드 a개를 뽑았을때의 최대 비용 문제는 항상 점화식을 구성하는 부분... 일단 부분과의 연관성을 생각하기 위해 DP[i-1]과의 관계성, 즉 부분해를 찾으려고 노력하였다. 문제에서 주어신 예를 통하여 생각해 봤다. DP[4]를 구해야 하는데 DP[3] 과 어떤 연관성이 있을까? DP[4]는 카드 4개를 뽑을때의 최대값, DP[3]은 카드 3개를 뽑을때의 최대값. 둘간의 차이는 카드 1장 의 차이이다. 문제는 마지막에 1장을 뽑을 수도 있지만, 2장, 3장, 4장 모두 가능하다는 점 이다. 다.......

[백준] 9613번: GCD 합 <96> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 그냥 GCD가 뭔지만 알면 풀수 있는 문제였다. 다음 글을 먼저 읽어보길 권장한다. GCD의 개념을 알았다면, 이후 자료형의 범위만 주의해서 풀면 바로 답이 나온다. 나의 코드

[백준] 11651번: 좌표 정렬하기 2 <97> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번문제는 원래 너무 쉬워 글을 안쓰려고 했는데, 다른 분들이 pair를 활용해서 좀 (내생각에) 돌아가는 풀이를 한는 것 같아. 나도 풀이를 올려본다. 그냥 POS class 하나 만들고, 내부에 < 연산자 오버로딩 해서 sort() 해주면 간편하게 끝나는 문제이다. 연산자 오버로딩을 해줄때 y를 증가하는 순으로, 그다음 x를 증가하는 순으로 구현하라 하였다. Y를 먼저 비교하고 이후 X를 비교해서 return 해주면 된다. 참고로 vector에서 정렬을 하기 위해서는 < 연산자를 오버로딩 해줘야 한다. > 를 오버로딩 하면 안된다. (이유는.......

[백준] 9461번: 파도반 수열 <92> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 아니 사실 이번문제는 그냥 그림 계속 그리면서 숫자를 직접 count 해보니까 규칙이 나왔다. 별다른 생각을 하지는 않았다. 그림으로 이를 확인해 보자. 예를 들어 7번 삼각형을 봐보자. 7번 삼각형의 한 변을 구성하는 삼각형은 6번과 2번 삼각형 이다. 숫자가 증가해도 이와 같은 양상을 보이며, 점화식은 DP[i] = DP[i-1] + DP[i-5] 가 된다. 이점 외에 주의해야할 사항이 하나 있는데, 이는 변수를 long long으로 잡아야 한다는 점 이다. 위와 같이 피보나치 수열의 형태를 하는 점화식은 수가 금방커지기 마련이다. 이응 위해 lon.......

[클라우드] 클라우드 컴퓨팅의 경제적 타당성 (3장, 클라우드 세상 속으로) [내부링크]

클라우드 세상 속으로 라는 책을 읽으며, 중요한 내용은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 3.1 클라우드 컴퓨팅의 경제성 1) 전통적인 사내 IT vs 콜로케이션 vs 외주 관리 서비스 vs 클라우드 모델 소규모 전자 상거래 어플리케이션을 배포한다고 가정해보자. 책의 시나리오 에서는 3단계 계층으로 설계되어 프론트-어플리케이션-백엔드 데이터베이스로 구성되어있다. 이들을 3년간 운영한다는 가정을 두고 각 케이스별로 계산을 진행하였다. - 사내 IT의 경우 월 861달러 하지만 여기에는 전력, 냉방, 랙공간, 네트워크 대역폭 등 추가사항은 고려되지 않음 - 콜로케이션 배포는 월 1861달러 이렇게 되면 장비를 수용할 설비가.......

[백준] 2225번: 합분해 <93> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 솔직하게 이거 나는 DP인거 생각 못했다. 그냥 BFS로 완전탐색 해야 하나? 이런 생각부터 들었던것이 사실이다. 해결방법이 딱 떠오르지 않아 다른 분들의 글을 좀 읽어본 후에서 야 DP임을 깨닫고 풀이방법을 읽어보게 되었다. 우선 DP배열을 정의해야 한다. DP[a][b] 는 숫자 a개로 합이 b가 되는 경우 를 의미한다. DP[3][6] 을 구해야 한다고 가정해보자. 이러한 경우의 수 들중에서 끝이 0으로 끝나는 배열부터, 끝이 6으로 끝나는 배열까지 존재할 것 이다. 만약 끝이 0으로 끝난다면 이는 사실상 DP[2][6]에서의 경우의 수와 동일하.......

[백준] 2011번: 암호코드 <94> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 딱 보고 깝깝 했다... 음.... DP[a] 라는 배열은 마지막에 a가 왔을때 가능한 경우의 수 라는거 정도는 파악이 바로 되는데, 문제는 이걸 어떻게 케이스를 나눈담?? 처음에 (잘못)생각한 케이스는 총 3가지 였다. 그림으로 표현하면 다음과 같다. 위에서부터 1) 맨마지막 i 와 i-1번 째 수가 구분되는 경우 (1자리수 : 1자리수) 2) 맥마지막 i 와 그앞 2자리 수가 구분되는 경우 (2자리수 : 1자리수) 3) 맨 마지막 두자리 수와 그앞 1자리수(i-2)가 구분되는 경우 (1자리수 : 2자리수) 하지만 이거 case별로 점화식 구하기가 생각보다.......

[클라우드] 보안과 폐쇄형 클라우드 (4장, 클라우드 세상 속으로) [내부링크]

클라우드 세상 속으로 라는 책을 읽으며, 중요한 내용은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 4.1 공개형 클라우드에서의 정보 보안 1) 클라우드 도입을 더디게 만드는 보안에 대한 우려 2009년 IDC에서 기업 it 임원들을 대상으로 클라우드 컴퓨팅과 관련된 우려사항들에 대한 조사 1위로 보안이 당첨되었다. 저자는 거의 모든 회사들의 내부 IT 환경만큼 클라우드 컴퓨팅 환경을 안전하게 만드는데 있어, 근본적인 장애물은 존재하지 않는다고 하였다. 암호화된 저장소, 가상 랜, 방화벽이나 패킷 필터등 표준 네트워크 보안 도구들처럼 잘 알려진 기술들을 이용하면 대부분의 이러한 장애물들은 즉시 제거될 수 있다. 2) 주요 클.......

맥미니 구매 리뷰 (언박싱) [내부링크]

나의 첫 Mac !! 태어나서 처음으로 Mac을 구매하였다. 사실 아이폰도 3GS때부터 사용했으며, 아이패드, 애플팬, 애플워치, 에어팟 까지 쓰고있는 내가 Mac을 안사고 있었던 이유가 있었다. 바로 새로운 OS에 적응해야한다는 점!! 이뿐만 아니라, 각종 관공서에서의 업무가 불편해지고 워드편집기능(한글 같은)이 호환이 잘 안되며, 더 나아가 학교 과제할때 윈도우 없으면 엄청 불편할거같아서 였다. 그럼에도 불구하고! 이번에 구매하게 된 이유는 바로 M1 slicon의 압도적인 성능을 느껴보고싶었기 때문이다. 너무 뛰어난 설계덕분에 메모리 마져 8GB면 충분하다고 할정도니... 애플을 원래도 좋아하던 내 입장에서 구매를 안해볼수가 없었다. .......

[백준] 2133번: 타일 체우기 <91> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 맨처음 든 생각의 풀이는 다음과 같았었다. 1) n이 2인경우 2) n이 4인 경우 따라서 점화식은 dp[i] = dp[i-2]*3 + dp[i-4]*2 라고 생각했으며, 그대로 구현하여 제출 했더그 그냥 바로 틀렸다.... 더 생각해보니 길이가 2와 4짜리 뿐 만 아니라, 길이가 6, 8, 10, 12 이런식으로 더 만들어 나갈 수가 있었다. 다음은 길이가 4인 모형과 길이가 6인 모형을 나타낸다. 따라서 먼저 길이가 2인 케이스를 계산 한 후, 이후 길이가 4, 6, 8 ... 짜리를 계산해 나갔다. j는 이전에 j길이를 갖는 블록의 경우의 수이다. 여기에 상하 대칭이니.......

[알고리즘] 최대공약수(GCD), 최소공배수(LCM), 유클리드 호제법 알고리즘 [내부링크]

최대공약수 GCD(Greatest Common Divisor) 최대공약수는 두 자연수가 공통으로 갖는 약수들 중에서 가장 큰 값을 의미한다. 예를들어 24와 18 있다고 해보자. 최대공약수는 6이 된다. 최소공배수 LCM(Least Common Multiple) 최소공배수는 두 자연수들의 배수들 중에서 공통된 가장 작은수를 말한다. 참고로 최소공배수는 최대공약수를 통하여 바로구할 수 있다. 최소공배수 = 두 자연수의 곱 / 최대공약수 가 적용된다. 예를 들어 24와 18의 최소공배수는 72 이다. 유클리드 호제법 (Euclidean Algorithm) 유클리드 알고리즘은 2개의 자연수 의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로 상대방 수를 나누어.......

[클라우드] 클라우드 컴퓨팅의 분류 (2장, 클라우드 세상 속으로) [내부링크]

클라우드 세상 속으로 라는 책을 읽으며, 중요한 내용은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 2.1 클라우드 컴퓨팅의 기술적 토대 1) 데이터센터를 활용함으로써 규모의 경제 달성 cloud 를 자동차에 비유해보면 데이터센터는 자동차의 엔진에 해당한다. 보통 데이터센터는 대규모 컴퓨터, 네트워크, 커뮤니케이션 장비를 모아두고 여기에 보안을 갖춘 설비라고 할 수 있다. 가장 큰 규모의 데이터센터를 운영하고 있는 구글, 아마존, MS 같은 회사들은 사용자가 많이 모여이는 곳 가까이이에 데이터센터를 두고있다. 이는 반응시간을 단축하고, 장애발생시 극복기능을 제공하기 위함이다. 또한 데이터센터의 위치를 낮은 가격에 전.......

[백준] 1699번: 제곱수의 합 <90> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 앞에서부터 차례대로 갯수를 구해나갈 탠데, 하나하나 전부 나눠보면서 구하진 않을태니 DP에 속한다는 느낌을 받았다. (근래 DP를 몰아서 풀어서 그런건지... 문제 읽다보면 조금씩 느껴지는 부분이있다. 뭐랄까? 노가다 방식의 풀이가 딱 떠오르지만 그렇게 풀면 시간초괴 되는 놈들은 DP 이였다??) DP[i] = j 는 i라는 숫자를 제곱수의 합으로 나타냈을때 최소의 갯수 j를 의미한다. 여기까지 처음 생각한 이후 나도 막혔다. 그다음 어떻게 해야하지? DP[i] 번째와 DP[i-n] 의 점화식을 구해야 할탠데..... 직관적으로 떠오르.......

[클라우드] 용도에 따른 클라우드 분류 (IaaS, PaaS, SaaS, FaaS) [내부링크]

클라우드 컴퓨팅의 분류 클라우드 컴퓨팅의 분류방식에도 여러가지가 있지만, 보통 "XaaS"로 정의하는 분류체계를 따르고 있다. 이때 X는 장비나, 인프라, 플랫폼, 프레임워크, 어플리케이션, 데이터센터 가 될수있다. 아직 이해 한될수 있다. 아래쪽에 비유를 설명했다. IaaS, PaaS, SaaS, FaaS XaaS 형태의 분류체계에서 클라우드 서비스는 고객에게 제공되는 패키지가 미리 패키징 되어있는 정도에 따라 분류한다. IaaS가 가장 날것의 상태이며, 그다음 Paas가 중간정도이며, 그다음에 Saas, FaaS 는 추상화정도가 높아 패키징정도가 높다. 지금까지 뭔말인거지? 싶을 수 있다. 이를 음식에 비유해 보자. 우리는 저녁에 밥을 먹기로.......

[백준] 1912번: 연속합 <88> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 처음에 보고 딱 DP를 생각하지는 않았다. 다만 input값이 100000 까지라는 점이 매우 거슬렸다. 나또한 맨처음에는 2중 for문 도는 방법이 생각났지만, 그러면 100000,00000 O(n^2) 까지라는 소리인데, 이건 백퍼 시간초과 날것이 눈에 훤하게 보였다. O(n^2) 알고리즘은 n이 최대 10,000 근처일 때까지 유효하다고 기억하고 있었다. 그럼 뭐 다른방법 있겠는가? 그냥 DP가 그다음으로 떠오른 방법이다. DP[i] 를 i번째 index까지의 배열의 합의 최대값 이라고 의미를 부여하였다. 그럼 index가 증가할때마다 DP[i] 값과 DP[i-1] + Arr.......

[백준] 2579번: 계단 오르기 <89> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번문제는 이전에 풀어본 포도주 시식 문제를 풀어본 경험이 있엇기에 쉽게 해결할 수 있었다. 이 문제에서 주의해야 할 사할 중 하나는 바로 가장 마지막 계단을 밟아야 한다는 점 이다. 이점 하나가 위의 포도주 문제와 다르다, 나머지는 거의 동일한 문제이다. 1) DP값을 저장할 배열 dp와 input값을 받을 arr 배열을 준비하였다. 2) 시작지점이 0번 index이고, 계단은 1번 index부터 시작한다. 3) DP[i] 는 i번 계단 까지의 최대값을 의미한다. 4) 초기갑을 구해야 한다. 1번 계단 까지의 최대값인 DP[1]은 그냥 arr[1]과 동일하다. 또.......

[클라우드] 클라우드 컴퓨팅이랑 무엇인가? (1장, 클라우드 세상 속으로) [내부링크]

클라우드 세상 속으로 라는 책을 읽으며, 중요한 내용은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 요즘 가장 핫한 기술인 cloud에 대한 기본적인 이해는 해야할것 같아. 당분간 cloud좀 공부해보기로 했다. 처음부터 아마존 cloud 들을 다루는 실습과 이론의 책을 구매할까 하다가, 우선 cloud 자체의 큰 그림을 보자는 생각이 들어 구마하게 되었다. 총 9장에 해당하는 많지 않은 쳅터로 내가 읽어가면서 딱 9번의 포스팅을 통하여 정리해볼 예정이다. 이책 후기가 거의 존재하지 않아... 내가 한단원 한단원 남겨볼 예정이다! 1.1 클라우드 컴퓨팅의 다섯 가지 핵심 원칙 클라우드라는 거대한 주제를 어떻게 설명해야 할까? 이 책에서.......

[백준] 11054번: 가장 긴 바이토닉 부분 수열 <87> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번 문제는 생각보다 간단한 문제였다. 이문제를 풀기전 꼭 풀어봐야할 2문제가 있다. 백준에서 11055번과 11722 번을 꼭 풀어보길 권장한다!! 부분 증가수열과 부분 감소수열의 원리를 알고있다면 금방 해결 가능하다. dp값을 담을 배열을 2개 만들어 각각 부분증가수열(dp)과 부분감소수열(pd)값을 구한후, for문을 돌면서 dp[i] + pd[i]의 최대값을 구하면 된다!. 다만 주의할점이 있다! 만약 입력값이 1, 2, 3, 2, 1 이였다고 해보자. 부분증가수열인 dp는 1 2 3 이 가장 길며 dp[3]의 값은 3이된다. 부분감소수열인 pd는 3 2 1 이 가.......

[백준] 11055번: 가장 큰 증가 부분 수열 <86> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 가장 긴 증가수열 (LCS) 문제 자체는 원래 유명한 문제로 DP를 공부해본 사람이라면 다들 풀어볼만한 문제이다. 이번 문제또한 거의 99% 같은 논리로 해결하면 되지만, 합을 구하는것 이니, dp에 저장해줄때만 주의 하면된다. 나의 코드

[백준] 2193번: 이친수 <83> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 끝이 0으로 끝나는 경우와 1로 끝나는 경우로 나누어 계산해야하는 생각이 들었다. 따라서 DP 배열을 2차원 배열로 구현하여 해결할 것 이다. 길이정보와 끝나는 숫자를 처리하려면 단순 1차원만으로는 표현하기 어렵다. 따라서 2차원을 사용할 것 이다. DP[a][b] = 길이가 a 일 때 마지막 수가 b일 경우의 수 DP의 정의는 위와 같다. 예를 들어 DP[4][0]을 구한다고 해보자. 길이가 4일때 마지막의 수가 0으로 끝나는 경우의 수는 DP[3][0] (길이가 3일때 0으로 끝나는 경우의 배열의 끝부분에 0을 추가) + DP[3][1] (길이가 3일.......

[백준] 9465번: 스티커 <84> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 주어진 input의 배열을 생각해 보자. 만약 맨 첫줄의 빨간 50점이 적힌 스티커를 가장 먼저 뗀다고 가정해보자. 그렇다면 2번째로 떼어낼 수 있는 가장 가까운 스티커는 무엇일까? 오른쪽 아래 대각선쪽에 있는 50점 짜리 스티커일 것이다. 왜냐하면 맨처음 시작점인 50점짜리 스티커를 떼는 순간 아래에 있는 30점과 오른쪽에 있는 10점은 찢어질 것이기 떄문이다. 그 다음은? 오른쪽 위 대각선에 있는 100점짜리 스티커, 다음은 우측하단의 10점짜리, 마지막은 40점짜리 스티커일 것이다. 만약 시작을 30점이 적힌 스티커로 시작한다.......

[백준] 2156번: 포도주 시식 <85> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이번에 푼 문제는 직전에 푼 문제와 유사한 점이 있어 금방 해결할 수 있었다. 위에 링크걸린 문제를 먼저 풀어보면 도움이 될 것 이다. 우선 dp[i]에 대한 정의부터하고 시작해야겠다 생각했다. 우리의 dp[i]는 i번째 포도주 까지 마셨을때의 최대값 을 나타낸다. 그럼 연속된 3개가 오지 않으면서 i번 째 최대로 마시려면 어떠한 경우들이 있을까? 총 3가지 경우가 존재한다. 1) i번째 포도주를 마시면서(arr[i]), i-2번째(arr[i-2]), i-3번째까지의 최대값(dp[i-3]) 포도주를 마시는 경우 2) i번째 포도주를 마시면서(arr[i]), i-1번째(a.......

[백준] 11057번: 오르막 수 <82> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 백준 10844번 먼저 꼭 풀어보시길!! 생각의 흐름 DP[a][b] = 길이가 a 일 때 마지막 수가 b일 경우의 수 일단 위의 문장이 핵심이다. 예를 들어보자. DP[3][4] 의 값, 즉 길이가 3일때 마지막 수가 4로 끝나는 경우의 수는 DP[2][0] + DP[2][1] + DP[2][2] + DP[2][3] + DP[2][4] 의 값이 된다. 즉 길이가 2이고 0으로 끝나는 경우의 수에다 맨뒤에 4만 추가해주면 되며, 길이가 2이고 1으로 끝나는 경우의 수에다 맨뒤에 4만 추가해주면 되며, 길이가 2이고 2으로 끝나는 경우의 수에다 맨뒤에 4만 추가해주면 되며, 길이가 2이고 3으로 끝나는 경.......

[백준] 1167번: 트리의 지름 <79> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이 문제는 트리의 지름을 구하는 알고리즘을 알고 있어야 풀수있다. 모르면 삽질좀 할 문제인것 같다. 위의 글에서 내가 이를 정리해 두었다. 이 알고리즘을 이해하면 구현은 쉬워진다. 나의 코드

[백준] 11726번: 2xn 타일링 <80> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 DP인건 보면 느껴지는데, 경험상 이런문제는 마지막 부분을 제외한 결과값에 마지막을 추가해주는 방식으로 구해야 한다. 이게 뭔 멍멍이 소리인가? 하는 분이 있을것 이다. 다시 설명해 보겠다. 1xn 모양의 타일을 채워야 한다고 생각해보자. 다음 그림을 확인해 보자. n짜리 길이의 타일의 경우의 수는 n-1 짜리의 경우의 수에다가, 마지막에 세로로 1개를 추가해주면 된다. n-2 짜리의 경우의 수에다가, 마지막에 가로로 2개를 추가해주면 된다. 이를 점화식으로 나타내면, f(n) = f(n-1) + f(n-2)가 된 것 이다. 이는 피보나.......

[백준] 10844번: 쉬운 계단 수 <81> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 주어진 길이가 n이라면 길이가 n인 계단수는 길이가n-1일때의 계단수에 추가해주면 된다. 따라서 처음에는 1차원 배열을 생각하기 쉽다. n번째를 구하기 위해 n-1번만 필요하다면 1차원 배열로 bottom-up방식으로 충분하게 해결 가능할 것 같다. 하지만 생각 못한점이 있다. n-1번째 칸이 어떤 숫자가 오든 상관없이 똑같은 연산을 해줘야 할까? n번째 수가 0 라면 직전의 수는 1만 가능하다. n번째 수가 9 라면 직전의 수는 0만 가능하다. n번째 수가 k 라면 직전의 수는 k-1 or k+1만 가능하다. 따라서 n-1번째 배열에는 갯수뿐만 아.......

[Django] 완성 + 삭제당함 <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 완성!! 드디어 그동안 만들언 Airbnb를 Django로 구현을 완료할 수 있었다!! 문제는 오늘 다 만들도 AWS EC2를 통하여 배포하려고 씨름하던 끝에 중요 정보를 날려버렸다...^^ 원래 EC2로 배포하려 했지만, 생각보다 어려운 배포 설정과정에 너무 짜증이나, 만들고 있던 EC2 instance를 삭제를 눌렀다. 문제는 이 EC2는 내 컴퓨터 상의 commit을 기반으로 deploy가 진행되고 있기 때문에 이와연동이 되있다. EC2 종료할때도 지금 생각해보면 "중요데이터가 삭제될 수 있습니다" 라고 경고해줬던것 같다. 하지만 그때는 이점을 생각 못하고 그냥 종료 눌렀다...................

[알고리즘] 트리의 지름 (Diameter of Tree) [내부링크]

트리의 지름 이란? 트리의 지름은 두개의 말단노드간의 최장거리를 의미한다. 각각의 정점을 u, v 라고 한다면 이들간의 거리는 d(u, v) 라고 함수로 나타낼 수 있으며, 최장거리(지름)는 이러한 d(u, v) 값들중 최대인 Max d(u, v)라고 할 수 있다. 트리의 지름을 찾는 알고리즘 BFS(node) 를 통하여 node로 부터 가장 멀리있는 node를 구한다고 해보자. 이 방식은 greedy 방식에 해당된다. < 알고리즘 > 1. 임의의 시작 정점 s로부터 가장 멀리있는 정점인 u를 BFS(s)로 구한다. (DFS도 가능) 2. 이렇게 구한 정점 u를 시작정점으로 하여 다시 BFS(u)를 구한다. 3. BFS(u)를 통하여 구해진 가장 멀리있는 정점 v를 얻었다면, 이렇게 구해.......

[Django] USER PROFILE, EDIT PROFILE, CHANGE PASSWORD <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 21 : 유저프로필 수성, 비밀번호 수정, 권한인증 이번 쳅터는 좀 어렵게 느껴지는 단원이였다. 내가 집중을 못한건지... 몇몇 부분들에서 이해를 하지 못하는 부분들이 발생하였다. 그나마 이해한 것 중 놀라웠던 기능은 mixins 기능이다. Django에서는 user의 권한에 관한것을 mixin을 통하여 구현한다. 예를 들어 유저가 카카오로 id를 통하여 가입하였다면, 회원정보의 수정을 할수가 없다. 카카오의 정보를 그대로 받아 만들어졌기 때문이다. 하지만 유저의 권한을 막아두지 않으면 수정이 가능해진다. 이러한 기능을 막기위해 mixin을 사용한다! UserPassesTestMixin 우.......

[백준] 1991번: 트리 순회 <77> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 트리의 구현은 예전에 많이 해봐서 어렵지 않았다. 전위, 중위, 후위 순회의 논리조차 바로바로 생각나는 상황이였다. 문제는! 트리의 구현이 딱 생각나지 않았다. "이걸 진짜 예전 자료구조 공부할때 처럼 class로 다 구현해야하나?" 란 생각이 계속들었다. class를 활용하여 구현한 모습은 다음 글에서 확인해볼 수 있을것 이다. 다만 이번에는 직접 class를 사용하여 구현하지는 않았다. 대신 배열을 이용하여 알파벳을 표현하였다. 다음 코들르 보자 각 노드는 left, right 값을 갖는다. 이러한 node가 총 27개가 모여 배열 a.......

[백준] 11725번: 트리의 부모 찾기 <78> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 input값을 받아들이면서 인접리스트 로 tree를 구현한다. 이후 생성된 인접리스트를 사용하여 1번 노드부터 DFS를 실행하여 내려가면 된다. 다음 그레프 모형은 문제에서 주어준 예시를 기반으로 만든 tree 이다. 1번 부터 DFS를 진행하면서 내려가는데, 우선 1번을 방문처리 한 후 1번의 자식인 4번으로 DFS를 진행한다. 4번에 도착하였을때는 자신의 부모인 1번을 tree[4] = 1 로 기억해 둔다. 이후 4번에서 2번으로 DFS를 나아가면 tree[2] = 4 로 2번 노드의 부모를 기억한다. 자신의 부모를 기억해두는 것 이 핵심이다.......

[백준] 2146번: 다리 만들기 <76> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 3번틀리고 4번째가 되어서야 맞출수 있었던 문제였다. 생각의 흐름 맨처음 이 문제를 보고 든 생각은 2가지 방식이였다. 1) 각각 의 섬마다 BFS 를 돌려 섬을 중심으로 그 경계면을 자신의 섬의 색으로 칠해가다가, 서로다른 두 색이 만나는 순간 값을구한다 2) 한 섬씩 차례대로 BFS를 적용하여 그 최소값을 구하고, 최소값을 계속 갱신하면서 가장 최소의 값을 구한다. 원래 난 1번의 방식으로 구현을 하였다. 하지만 중간에 해결하지 못하는 부분이 생겨서 2번 방식으로 구현을 변경하였다. 2번의 방식으로 구현하기전 어떠한 흐름으로 문제를 풀어갈.......

[백준] 9466번: 텀 프로젝트 <73> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 와 거의 6시간은 이문제만 본것 같다... 시간초과가 계속 나서 해결 못하다 겨우 풀었다... 생각의 흐름 우선 DFS로 방문하지 않은 정점들은 모두 탐색을 할 것 이다. 예시는 다음 case를 예로 들어 설명해 보겠다. 위의 input값으로 student[] 배열을 만들 수 있는데, student[i] 의 의미는 i번째 학생이 선택하는 학생이다. visited[i] 의 의미는 i번째 학생을 방문했는지를 표시한다. done[i]의 의미는 i번째 학생은 더이상 방문할일이 없을음이 확실할때 true가 됩니다. 우선 시작상황은 다음과 같다. DFS(1)부터 시작될 것 이다. DFS의 큰 틀은 다.......

[Django] LOG IN WITH GITHUB, KAKAO <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 17, 18 : 카카오, 깃허브 로그인 이번시간에는 카카오 아이디와, 깃허브 아이디를 이용하여 나의 airbnb에 가입하는 로직을 구현하였다. 깃허브와 카카오 모두 OAuth 2.0 을 지원하여 이를 이용하여 구현하였다. 우선 해당 서버로부터 인증코드를 받아와야 한다. 받은 인증코드를 통하여 다시 token을 구하고 이를통하여 API의 사용하여 유저의 정보를 받아올 수 있다. 이와 관련된 자세한 글을 하나 읽어볼 수 있었다. 링크를 남겨둔다. 카카오 쪽의 로그인 logic만 설명해 보겠다. github도 이와 거의 동일하다. 우선 맨처음 우리의 홈페이지 에서 사용자가 login with Kak.......

[백준] 2667번: 단지번호붙이기 <74> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 간단한 DFS 문제이다! 생각의 흐름 간단하게 DFS를 적용하면 된다. 위의 코드를 보면 조건문을 통하여 아직 방문한적 없으며, 0이 아닌 곳만을 DFS 탐색을 시작할 수 있다. DFS 전에 항상 cnt변수를 0으로 초기화 해주어야 하며, DFS 탐색이 끝났다면 vector에 삽입하야 한다. 또한 DFS의 구현같은경우, 개개인 마다 차이가 조금 있지만 나같은 경우 함수의 상단에 탈출조건을 적어주는 편을 선호하는 코드를 사용한다. 위의 코드에서는 MAP의 범위를 벗어나거나, 해당 값이 0으로 되어있다면 탈출해야한다. 또한 이전에 방문한적이 있다면 탈출해야 한.......

[백준] 2178번: 미로 탐색 <75> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 최단거리를 구하는 문제이기에 바로 BFS를 적용하였다. DFS는 중복하여 방문하는곳이 많아져 최단경로를 찾기 적합하지 않다! 생각의 흐름 우선 BFS를 거의 생각없이 적용하니 그냥 해결됬다. 예전에 적어둔 섬의 개수 문제와 거의 동일한 논리를 갖고 풀면된다. 또한 최단거리로 가장 먼저 도착지점에 도달하면 바로 return해주면 되기 때문에 따로 mincnt 변수같은것을 생성하여 mincnt = min(mincnt, cnt) 을 통하여 모든 경로를 확인하면서 최적의 길이를 구할필요가 없다!. 가장 먼저 도착하면 바로 그 값을갖고 return하면 그 값이 최소의 거.......

[Django] MAKE IT ALL BEAUTIFUL <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 20 : Tailwind CSS 의 적용 이번시간부터는 지금까지 만들어 온 것들을 Tailwind css와 Gulp를 사용하여 이쁘게 만들어가는 작업을 진행하였다. 나같은 경우 디자인의 측면또한 중요하다 생각하기에 이쁜 모습을 만드려 노력하였다. 이러한 나의 성향때문에 bootstrap을 사용한 틀에박힌 서버의 모습을 매우 싫어한다! 다행이 Tailwind-Css는 기존의 Css의 단점을 보완할뿐 여전히 CSS의 높은 자유도를 이어가기에 하나하나 나의 취향대로 수정하는 맛이 아주 재미있었다!! 이번 글에서는 지금까지 적용된 서버의 모습부분을 보이겠다. 1) main page 나의 이름에서 따와 JWbn.......

[백준] 10451번: 순열 사이클 <71> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 직전에 풀던 문제의 잔상이 남아서 그런가, 문제에 대한 깊은 생각없이 무의식적으로 BFS 방식으로 코드를 짜고 있었다.... 조금만 생각해보면 BFS가 더 편한 방식인데.... 문제를 읽고 충분히 생각하는 시간을 중요하게 생각하자! 생각의 흐름 우선 배열에 해당 숫자들을 담아야 겠다는 생각이 먼저 들었다. 또한 배열의 index를 1번 부터 사용하여 input을 받아야 사용하기에 편할거란 생각또한 들었다. 추가적으로 colorArr 이라는 배열을 하나 더 만들었다. 방문체크 겸, cycle간의 색을 지정해 주기 위함이였다. 우선 for문을 통하여 배열의 원소 전.......

[Django] SIGN UP <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 15. 회원가입 이번시간에는 회원가입 기능을 구현하는 시간 이였다. Login, Logout 때와 비슷한 순서로 진행되었다. 1) template 상에서 자리잡기 POST 방식으로 form을 전달하게 될 것 이다. 2) Form 생성 Form의 생성을 총 2가지 방식으로 보여주셨다. 처음에는 그냥 form을 상속받아 구현하는 방식을 취했다 from의 5가지 필드를 직접 지정해 주었다. 이후, clean_email 과 clean_password 의 후처리 과정을 거치면서 data를 손질 한 후, save() 를 사용하여 user의 정보를 저장하는 방식이다. 위에서 다음 코드부분이 User model 상에 실제 유저의 정보를 새롭게 만드는.......

[백준] 2331번: 반복수열 <72> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 흐름은 간단했다. 첫 숫자를 받은 이후부터 계속 다음 숫자를 계산하면서 배열에 저장하되, 이미 나왔던 숫자가 다시 나오게되면 멈추면 된다. 중복체크를 위해서 visited[] 을 사용하였으며, 범위는 300000 까지 잡았다. 9의5승 4번 더한값이 최대값이기 때문이다. 중복된 값 n이 나오면, res배열의 처음부터 중복된 값이 나오기 전까지 j 변수를 사용하여 그 수를 확인한다. 이후 출력한다. 내 코드

[Django] VERIFY EMAIL <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 16. 이메일 인증 하... 이번시간에는 오류가 계속 발생해서 시간을 많이 잡아먹었다... email 대행 싸이트로 mailgun 이라는 싸이트를 이용했는데, 여기서 설정하는 과정에서 시간 엄청 잡아먹어 버렸다... 또 설정을 마쳐도, 초기에 몇가지 이유로 정상작동하지 않아 고생좀 했다... 우리는 유저 model에다 email_verified 와 email_secret 을 배정하여, 저장할수 있도록 추가해 주었다. 이후 model 안에다 메일인증함수를 구현하였는데, 상식적으로는 view 안에 구현해야 할 것 같지만 model안에 구현한 이유가 있다. model안에 구현함으로써 단지 계정을 만들때만 메일인.......

[백준] 2252번: 줄 세우기 <68> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 일단 처음 읽을때 머리에 들어온 정보는 "일부의 학생만 키를 비교해 봤다" 였다. 예를 들어 6명의 학생이 있는데, 1번과 2번은 비교하여 대소관계가 만들어 지고, 나머지는 가능한 경우라면 무엇이든 상관이 없다는 말인데.. 흠 일단 학생들을 정점이라 생각하고, 키를 비교한 두 학생간의 관계를 간선으로 연결하면 그레프가 나오긴 한다. 모두 비교를 해보면 1직선의 직선으로 그레프가 형성되어 키의 순서를 알수 있을탠데, 그럴수 없으니 그레프의 부분 부분에 대한 정보만을 갖고있게 된 것이다. 특정부분의 우선순위를 알.......

[Django] INTRODUCTION TO VIEWS, URLS <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 10. VIEW, URL 이번 시간부터는 드디어 지겨운 모델링과 seeding 작업이 끝나고, 색다른 template와 view에 대한 이론적인 설명을 듣는 시간이 였다. MVT 모델의 설계 방식을 이미 책을 통하여 공부한 후 듣는 강좌인지라, 재복습한다는 느낌으로 들으니 내용이 한층 더 나아게 다가오는 느낌이였다. url이 들어오면 이를 URL-conf를 사용하여 view함수와 mapping하는 방법에 대하여도 배웠다. 또한 config 파일 하나에 모든 mapping을 지정하는 것 이 아닌, 각 app별로 urls.py를 만들어 자신의 url은 app 자기 스스로가 처리하도록 구현 하였다. 10.0 : url과 view의 mappi.......

[Django] HOMEVIEW <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 11. HOMEVIEW 이번 시간에는 main페이지인 home의 logic 즉 view를 구현하는 일을 공부하였다. 크게 2가지 방식의 과정을 보여주셨다. 1) funtional view 이 방식은 프로그래머가 하나하나 직접 구현해야 한다는 단점이자? 장점이 동시에 있는 방식이다. 우선 이런 방식을 통하여 view의 내부가 어떻게 돌아가는지를 2) class based view 이 방식의 기존의 직접 구현하던 방식에서 벗어나, Django가 제공해주는 class형 view를 상속하여 이를 확장해 나가는 방식이였다. 예를 들어 다음 코드를 확인해 보자. 장고가 제공하는 ListView를 상속받아 만든 HomeVIew라는 class이.......

[백준] 11724번: 연결 요소의 개수 <69> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 크게 문제어 어려운 부분이 없다. 그냥 연결요소를 구하면 되는 것 이다. 연결요소를 구하는 방식은 DFS오 BFS 방식이 있는데, 난 DFS방식이 편하다 느껴 DFS로 구현하였다. 모든 정점을 한번씩 DFS 해주면 되는데, DFS는 선택된 정점을 포함하여 이 정점에 연결된 모든 정점까지 같은 번호를 부여하는 방식이다. 1번 정점부터 선택하여 이와 연결된 모든 정점에 cnt값 1을 부여한다, 예를 들어 1 - 2 - 3 으로 연결되어 있었다면, DFS(1)을 진행하면 1,2,3 모두 cnt값은 1이 되며, 이는 하나의 연결요소라는 의미이다. 그럼 2번과 3번 을 D.......

[Django] DETAILVIEW <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 12. detail_view 지난 시간까지 main페이지 에서 방의 목록을 보여주는 작업을 하였다면, 이번시간부터는 방의 세부사항 page를 만드는 작업을 하였다. main의 방 목록에서 하나를 클릭하면, 해당 방의 detail_view로 mapping 되어 처리후, 이를 template를 사용하여 다시 renderign 하여 화면에 출력해 주는 것 이다. 또한 functional view와 class based view 모두 확인할 수 있었다. 1) functional view 함수형 뷰로 직접 구현했을 때는 우선 reqeust와 페이지 번호를 받아 해당 room에 대한 정보를 Room.object로 부터 얻은후, 이를 template를 통하여 render하여 반환 하.......

[알고리즘] Bipartite Graph [내부링크]

이분 그레프 (Bipartite Graph) 란? 우선 학교에서 공부할때 필기한 내용을 먼저 보인후, 이를 내가 설명하여 보겠다. 이분 그레프란 정점의 집합을 2개의 독립적인 집합으로 나눌 수 있으며, 나눠진 집합에서는 서로다른 집합 사이에만 간선이 존재하는 그레프를 의미한다. 즉 같은 집합 내부의 정점간에는 간선이 있으면 안된다. 이를 그림으로 표현하면 다음과 같음 그레프를 의미한다. 집합이 오른쪽(V)과 왼쪽(U) 2개의 집합으로 나뉘어 졌다. 간선들의 양끝 정점(u와 v) 또한 서로다른 집합에 포함되어있다. 정점 u는 집합 U에, 정점 v는 집합 V에 포함되어야 하는 것! 추가적으로 그림에는 없지만, 한쪽 집합에 그냥 정점 하나만 달랑 있.......

[백준] 1707번: 이분 그래프 <70> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 이분그레프의 개념이 뭔지는 알아야 한다. 내가 써논 글이 있으니 이를 확인해보면 될 것 이다. 위의 설명을 본후 BFS를 생각하면서 구현하면 된다. 나같은 경우 정점을 색으로 구분해 주기 위하여 colorArr을 만들 었으며, 기본적으로 -1로 초기화 해 주었다. 이후 정점들을 2개의 독립적인 집합으로 나누어야 하는데, 이때 사용된 수가 0과 1 이다. 먼저 시작정점을 1로 색칠해 준 후, 이 정점과 인접해있으면서 방문하지 않은 정점이 있다면 0으로 칠해준다. 0으로 칠해진 정점을 기준으로 다시 같은 동작을 반복한다. 이때 주의해.......

[Django] SEARCHVIEW <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 13. Search_view 이번시간에는 검색창 부분을 만드는 과정을 공부하였다. 강의를 듣기 시작한 이후 가장 머리가 지끈지끈한 과정이였다. 우선적으로 하나하나 직접 코딩하면서 어떤부분이 필요한지를 보여주신 후, 이후 class를 상속받았다. 또한 form을 구현하기 위해 html 내부에서 작성하는 것 이 아닌! forms.py를 따로 만들어 구현하였다. html에는 다음과 같이 코드를 적어주었다. form으로부터 처리된 데이터가 {{form.as_p}} 부분에 rendering 되어 화면에 출력될 수 있었다. forms.py는 다음과 같다. django의 form을 상속받아 구현하였다. 코드를 보면 알수있는데.......

[Django] SEARCHVIEW <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 14. login, logout 이번시간에는 사용자의 id를 검증하고, 로그인 시키고, 다시 로그아웃 시키는 과정을 공부하게 되었다. 로그인 과정의 구현 또한 이전 13쳅터의 search와 비슷한 방식으로 흘러갔다. 1) 우선 template 상에 위치할 곳을 잡았다. base.html을 따로 구현하여 상속시키는 방식으로 만들었다. 해당 부분의 login을 누르면 users:login 으로 이동하게 된다. 또한 id와 password가 담긴 form 또한 POST 방식으로 전달될 것 이다. 2) form은 어떻게 구현했을까?? 생각보다 간단한 방식으로 구현할 수 있었다. 마치 model에서의 field구현과 비슷한 방식으로 해결.......

[CPS] 101번 - 알리바바와 40인의 도둑 <67> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제는 정확하게 가장 높은 탑 쌓기 와 동일한 문제였다. 그럼 이 글을 쓸대없이 내가 쓰는 것 일까? 아니다. 강사분의 풀이가 월등하게 좋았기 때문이다. 대부분의 책이가 글을 보면 Knapsack을 2차원 배열을 이용하여 푸는데 강의에서는 1차원 배열만을 사용하여 해결하는 코드를 볼 수 있었다. 이를 통해 공간복잡도를 상당하게 절약할 수 있었다. 강의 코드 코드 또한 너무 깔끔하다!! 핵심은 시간기준의 배열을 뒤에서 부터 확인한다는 것 이다. 뒤에서 부.......

파이썬 웹 프로그래밍 [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/06/1 ~ 2021/06/16 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 파이썬 아주 기본 문법은 알아야 한다. 다만 너무 깊게 문법을 알 필요는 없다. 나만 해도 파이썬 문법 엄청 대충 공부해서 종종 햇갈리고는 한다. (진심이다.. 근데 이건 내가 개을러서가 아니다. 파이썬 언어 그 자체는 애당초 깊게 공부할 가치가 없는 언어.......

[Django] OTHER APPS, ROOM ADMIN <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 5. OTHER APPS 5장은 지난 단원에 이서 나머지 app들에 대한 model을 정의해주는 작업을 마무리 하였다. MVT 페턴의 개발 방식에서는 일반적으로 Model에 대한 정의를 먼저 마친후 view나 template를 구현해야 하기 때문에 조금은 같은 일은 반복하는 느낌이 없지 않아 았는 구간인 것 같다. 그래도 처음 공부하는 내 입장에서는 어느 부분들을 DB에 저장해야하는 지 부터가 혼돈인데, 이런 부분을 익혀나갈 수 있었다 6. ROOM ADMIN 6장에서는 지금 까지 만들어 왔던 모델들을 기반으로 admin 페이지에서 좀더 체계적이고, 효율적으로 확인 관리 할 수 있도록 한는 작업을 하.......

[Django] MODELS, QUERYSETS <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 6. QUERY_SET 이번시간에 배운 내용들을 좀 중요한 내용이 많았다. 주로 shell을 이용하여 DB에 접근하고 데이터들을 다루는 방법을 보게되었다. models class를 통하여 DB에 접근할 수 있는데, 이때 필요한 것이 object와 Manager이다. Manager를 통하여 다양한 filter, count 등에 관한 함수들을 이용할 수 있었다. 예를 들어 from users.models import User 을 한후, User.object 에 접근하면 model class의 Manager를 확인할 수 있는데, 이를 통해 우리가 DB에 접근 가능하도록 도와주고 있었다. Query_set은 이렇게 Database에서 전달받은 객체들의 모음(list)이다. DB(.......

[백준] 2660번: 회장뽑기 <67> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 문제풀면서 솔직히 플로이드 와샬 알고리즘을 적용해야 겠다는 생각이 처음에는 들지 않았다. 다만 바로 연결된 친구이면 1점을, 한다리 건너 친구면 2점을, 2다리 건너 친구면 3점을 ... 부여해 나간다는 점 에서 그래프를 활용해야 겠다는 생각 정도는 들었다. 그리고 다음 문장이 핵심 이였다. 어떤 두 회원이 친구사이이면서 동시에 친구의 친구사이이면, 이 두사람은 친구사이라고 본다. 이말은 relaxation 연산을 의미하고 있었으며, 문장으로 설명하면 "최단거리를 구하라" 는 의미와 동일했다. 정점이 여러개 있으면서, 최.......

[Django] MORE ADMINS <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 8. More Admin! 이번시간에는 model 과 admin 수정의 거의 마지막 단계라고 하셨다. 모델이나 admin페널 안에 직접 함수를 구현하는 방식또한 배웠다. 신기하다 느꼈다!! 또 8.4 절에서 배운 Django에서의 사진 저장방식에 대하여도 배웠는대 흥미로웠다. 또 간만에 오버라이딩의 개념이 나왔는데, 강의 주석에 나름 알고있는것을 적어두었다. 강의를 보는 다른 극초심자 분들께 도움이 될수 있었으면 좋겠다! 기타 등등 여러가지 배웠는데... 각 절 단위로 요약을 해놨으니 복습용으로 나도 조금씩 봐야겠다!! 8.0 : model 안의 함수! 1) model 안의 함수 만들기 admin 페널.......

[CPS] 완강!! [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 드디어 완강!! 드디어 문제풀이 입문용으로 듣고 있던 강좌를 모두 수강하였다. 인프런에서 좋은 강사분을 찾을수 있어 정말 다행이라고 생각된다. 총 115문제를 풀고, 해설을 보여주셨으며, 총 강의 시간은 25시간 정도 되는 것 같다. 하지만 문제를 읽고, 먼저 풀어보고 생각하는 시간 까지 합치면 대략 60시간 정도는 걸렸을 것 같다!! 이 강좌의 장점은 다음과 같다! 1) 학교 학부에서 나오는 기본적인 알고리즘은 모두 한번씩 건드려 주신다는 점 에서 더욱 좋.......

[Django] CUSTOM COMMANDS, SEEDING <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 9. COMMAND 와 SEED 이번시간에는 크게 2가지를 배웠다. 1) USER_COMMAND 만들기 2) SEED_DATA 생성하기 USER_COMMAND 장고 내부에서도 유저가 직접 커맨드를 만들어 사용할 수 있었다. 커맨드의 custom 방법은 다음과 같다. 커맨드를 구현하기 위해서는 app 폴더 내부에 management 폴더를 생성한 후, 그 안에 다시 commands 폴더를, 그 안에 다시 사용할커맨드파일명.py 와 __init__.py 를 추가해주면 된다. SEED_DATA Django를 활용하여 많은 모델과, 어드민을 수정하였지만 아직 유저들이나, 방에 대한 정보가 없다. 우리는 Fake 유저들과 Fake 방 정보들을 추가해.......

[Django] USER APP <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 USER APP 이번 시간에는 USER APP에 대하여 배웠다. Django는 여러 app들이 모여 거대한 project를 구성하는 방식의 형태이다. 하나의 config 라는 master 폴더와 여러 app 폴더로 구성이 된다. users 라는 app를 구현해 봤는데 이중 models.py 와 admin.py 를 custom 하고 사용하는 법에 대하여 배웠다. 대부분 Django가 이미 제공하는 객체들을 상속받거나 import 하여 사용한다는 점이 강력하다 느꼈다. 또한 Django의 Model은 ORM 방식을 통하여 DB와 소통한다. 우리의 파이썬 코드를 SQL문을 직접 사용하지 않고도 DB에 저장하는 등 CRUD가 가능하도록 돕는다. Model은.......

[Django] ROOM APP <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다. 목차 ROOM APP 이번 시간에는 Room에 해당하는 APP에 대하여 model과 admin을 작성하는 과정을 공부하였다. 주로 배운 내용으로는 relationship에 대하여 배웠는대, 1:N(ForeignKey) N:N(ManytoMany) 에 관하여 배웠다. - 1:N(ForeignKey) 이는 1대 N의 관계로 블로그로 치면 개시물은 하나인데 여기에 댓글이 여러게 달리는 관계를 의미한다. N의 입장에서 ForeignKey를 설정해줘야 하며, on_delete와 같은 삭제에 관한 설정 또한 배웠다. - N:N(ManytoMany) 이는 N 대 N의 관계에 해당한다. 또한 AbstractItem 이라는 class를 하나 만들어 이를 상속받는 구조를 사용 하였다. Me.......

[CPS] 97번 - 알리바바와 40인의 도둑 <64> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 문제 자체는 쉽게 해결하였지만 강의에서의 풀이와 나의 풀이가조금 달라 남겨본다. 나의 코드 나같은 경우 dummy 값으로 배열의 태두리를 만들어 0으로 채운 후 시작하였다. (생각해보니 필요하지는 않았다..) 또한 i가 1 이거나, j가 1인 배열의 값들은 이전 값 res[i][j] 에 자기자신의 값MAP[i][j] 만 더하도록 하였고, 나머지 배열에서의 res[i][j]는 res[i-1][j]와 res[i][j-1] 에서 작은 값에다가 MAP[i][j]값을 더해주는 방식을 취하였다. 강의 코드 다만 강.......

[알고리즘] Knapsack Problem [내부링크]

Knapsack 알고리즘 이란? 도둑이 보석가게에 배낭을 메고 침입했다. 배낭의 최대 용량은 W이며, 이를 초과해서 보석을 담으면 배낭이 터질 것이다. 각 보석들의 무게와 가격은 알고 있다. 배낭이 찢어지지 않는 선에서 가격 합이 최대가 되도록 보석을 담는 방법은? 위와 같은 문제를 해결하는대 사용되는 알고리즘을 대표적으로 Knapsack 알고리즘 이라고 부른다. 이러한 Knapsack 문제는 동적프로그래밍(DP)의 대표적인 문제로, 대부분의 알고리즘 서적에서 확인해볼수 있는 대표 유형이라 할 수 있다. 알고리즘의 분석 어떤 문제를 DP로 풀기 위해서는 '최적의 원리' (Principle of Optimality) 가 성립하는지를 확인해야 하는데, 최.......

[백준] 12865번 (평범한 배낭) <65> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 그냥 대놓고 knapsack 알고리즘 문제이다. 이에 관한 이론적인 부분의 글을 블로그에 적어 놨다. 그 글을 한번 읽어보면 된다. 위의 글을 읽어보면 다음 코드는 그냥 이해될 것 이다. 내 코드 나같은 경우 런타임 에러가 2번이나 떳었다..... 배낭의 무게는 100,000 까지 가능한데.. 이점은 간과하여 input을 받을때 런타임에러가 발생하였다. input의 범위 항상 주의하자!

[Django] 환경설정과 장고의 소개 <Airbnb-clone> [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다 Django clone 강의 시작 기존에 읽고 있던 "파이썬 웹 프로그래밍" 이라는 Django에 관한 기본 개념서의 1회독이 끝났다. 슬슬 갖고있는 지식을 기반으로 무언가를 만들어 봐야하는데, 무턱대고 내 스스로 만들어보는것도 좋지만 우선 나보다 잘하는 사람이 어떻게 만들어가는지 강의로 한번 확인해 보고 싶었다. 인프런에도 많은 좋은 강의들이 있지만, 이번 까지는 노마드 코더에서 수강하기로 마음먹었다. 이유는 다음과 같다. 1) 사실 가격이 좀 쌔서 고민을 많이 하긴 했는데.... 예전에 HTML/CSS 첼린지 수료후 30% 쿠폰 받아논 것이 있기 때문에 쿠폰이 아까워서.......

[백준] 2655번: 가장 높은탑 쌓기 <66> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 와 이번문제는 핵심문제를 푸는 과정보다는, 부가적인 쌓여있는 탑의 순서를 출력하는 문제가 더 심각했다. 어떻게 해결할지 고민고민 하다 겨우 풀었다.... 이 글 마지막에 input으로 사용될 예시들을 더 추가하겠습니다. 백준 본문 문제의 예시는 하나라 오류를 잡기 힘든 분들에게 도움이 되길! 생각의 흐름 이 문제는 크게 2가지 문제를 해결해야한다. 1) top을 어떻게 쌓아야 최대 값이 나오는지 파악하기 2) 최대 높이를 갖는 top을 어떻게 back-tracking 하여 사용된 block의 번호를 출력할 것 인지 1번 문제부터 해결해 보자. 우선 문제를 읽고.......

[HTML/CSS] Kokoa-Clone-2021 완강 [내부링크]

내돈내고 직접 수강하여 공부하고 그 흔적을 남기는 기록입니다 재수강 의 이유! 사실 나는 예전에 이 강좌를 한번 다 들은적이 있다. 심지어 첼린지도 수료하여 쿠폰도 받았었다. 이게 벌써 한 1년전쯤 일 것 이다. 문제는 html과 css를 안건들인지 어느덧 1년이 지나가니 기억에 거의 남지 않았다는 점 이다. 요즘 Django를 공부하고있는데 어느정도 기초적은 html과 css, javascript가필요하기 때문에 해당 책을 새로구매하여 읽어볼까 하다, 그냥 있는 강좌를 다시 공부하는 편이 더 효율적이라 생각 되었다. 다행이도 강좌가 최근에 업데이트 되어 내가 들었던 강좌와 조금은 다른 내용이기 때문에 너무 본거 다시보는 느낌이 들지않아서 좋.......

[네트워크] Transport Layer(Multiplexing, RDT) <ch4> [내부링크]

해당 본문은 대학교 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 1) Transport-layer services 2) Multiplexing and demultiplexing 3) Connectionless transport: UDP 4) Principles of reliable data transfer Transport-layer services 서로 다른 host 가 갖고있는 app process들 에서 논리적인 관계(logical communication)을 형성해 준다. trasnport protocol(전송계층) 은 end system 간의 통신을 지원한다. 전송계층은 socket 인터페이스를 직접적으로 다루는 계층이다. - sender : app 계층의 message 를 segment에 담아서 network layer를 통해 전송한다. segment는 전.......

[백준] 16236번 (아기상어) <62> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 상어가 다음장소로 이동가능 한 곳의 좌표를 State class로 구현하였다. 또한, 상어 자체의 정보를 갖고있는 Lion 이라는 구조체를 만들었다. 이 Lion 이라는 구조체는 자신의 위치 정보와 더불어 SizeUp() 이라는 함수를 갖고 있는데, 전역변수인 SIze 값을 증가시킴과 더불어 ate변수값을 초기화 시켜준다. (Lion 이라 한 이유는 다른 비슷한 문제에서 아기 사자 심바 라고 나온문제가 있었기 때문 무시해 주시길...상어니 ... shark 여야 정상) 우선순위 큐를 사용한다는 점이 핵심이다. 왜? 우선순위 큐 여야만 하는것 일까? 그냥.......

[백준] 11053번 (가장 긴 증가하는 부분 수열) <63> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. LIS 는 중요한 내용중 하나로 알고리즘의 흐름을 아예 기억해두는 것도 좋은 것 같다. 생각의 흐름 input 으로 주어진 예시를 생각해보자. 0) 맨처음 10은 최대길이가 1인것은 직관적으로 구할 수 있다. 따라서 cache[1] = 1을 해줘야 겠다는 생각이 들었다. 그다음은 20이다. 20이 숫자의 가장 마지막에 오는 경우는 총 1가지 이다. 1) 10 20 따라서 cache[2]에는 1를 적어준다. 이는 기존의 10을 마지막으로 하는 수열에 20을 추가해준 것 이다. 그 다음은 다시 10 이다. 10이 가장 마지막에 오는 경우는 1가지 이다. 1) 10 그 다음은 다시 30 이.......

[네트워크] DNS : Domain Name system <ch3> [내부링크]

해당 본문은 대학교 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. DNS 란? DNS 는 어떤 기능을 하는 것 일까? 우리는 어떤 웹싸이트에 접속하려 할때 127.7.7.1 같은 IP 주소를 사용하여 접속하지 않는다. 만약 IP를 통해서만 웹싸이트를 접속해야 했다면 naver에 접속하는 것 조차 매우 버거운 일이 되었을 것 이다. 물론 이건 우리가 사람이기 떄문이다. 컴퓨터 입장에서는 잘 기억할수 있지만, 우리는 인간이기 때문에 IP 주소를 기억해가면서 싸이트에 접속할수가 없다는 것 이다. 따라서 우리가 서버에 접속하기 위해 www.naver.com 과 같이 주소창에 치면, 이를 IP 주소로 변환시.......

[CPS] 88번 - 미로의 최단거리 통리 <60> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. BFS 방식을 통하여 여러 미로의 경로중 최단 거리를 구하는 문제였다. 시작점을 중심으로 level 탐색을 한다고 생각하면 편하다. 나는 Queue에 좌표정보 + level 값을 한 쌍으로 하여 삽입 하였다. 즉 다음과 같이 Q를 만들었다. 하지만 강의에서는 애당초 dis 배열을 만들어 해당 위치에서의 값을 배열 자체에 기록하는 방식을 선택하셨다. 각각의 코드를 기록해 두겠다. 나의 코드 강의 코드

[백준] 7576번 (토마토: 한국정보올림피아드) <61> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 이번문제는 한국정보올림피아드 기출 문제였다. 생각의 흐름 우선 BFS 방식으로 익은 토마토 주변을 퍼져 나가면서 탐색해야 겠다는 생각이 들었다. 여기까지는 코드도 구현이 가능했다. 문제는! 익은 토마토가 2개 이상인 경우 예를 들어 다음 예시와 같은 경우 (1, 1) 에서 BFS 탐색을 끝까지 해버린후 나중에 (6, 4)에서 BFS 를 하려들면 이미 (6, 4) 의 주변은 방문했기 때문에 주변 토마토를 익히는데 도움이 되지 않는다. 이러면 (1, 1) 위치의 토마토 혼자서 일을 다해버린것이 되어버린다. 우리의 목적은 (1, 1) 과 (6, 4) 의 토마토가 같이 일.......

[CPS] 84번 - 휴가 (삼성 SW역량평가 기출) <56> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제는 삼성 SW역량평가의 기출문제로써 이미 공개된 삼성의 기출 문제이니 공유해볼까 한다. 입력 예제 출력 예제 생각의 흐름 일단 각 날짜마다 있는 일을 수락하는냐 마느냐 로 생각해보면 DFS tree가 root 를 기점으로 이진 트리를 형성하면서 구현된다 root를 기점으로 한쪽은 수락, 반대쪽은 수락하지 않은 상태로 DFS를 진행한다. 수락한 쪽은 lv값이 day 수만큼 건너 뛴다. 그리고 sum에다가는 수락한 해당 날 받을수 있는 비용을 더한다. 수락하지 않.......

[네트워크] 컴퓨터 네트워크 기본 (ch1) [내부링크]

해당 본문은 대학교 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 네트워크의 구조 사진을 먼저 확인해 보자. 네트워크 edge 는 가장 최단의 host 나 application을 의미한다. 이러한 host 간의 데이터는 router를 통하여 source 에서 목적지 까지 도달하게 된다. 또한 이런 router 들은 물리적인 전송매체(Transmission Media)를 통하여 연결되어 있다. 네트워크 edge 는 2가지 방식으로 진행된다. - Connection-oriented service (연결지향방식) 대표적으로 TCP(Transmission Control Protocal) 방식이 있다. 1) TCP 방식은 신뢰성 있으며, 메시지가 보낸 순서대로 도착하게 된.......

[CPS] 85번 - 수식만들기 (삼성 SW역량평가 기출) <57> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제는 삼성 SW역량평가의 기출문제로써 이미 공개된 삼성의 기출 문제이니 공유해볼까 한다. 입력 예제 출력 예제 생각의 흐름 처음에 나는 root에서 +, -, *, / 총 4방향으로 나뉘어 내려가야겠다는 생각이 들었다. 각 연산자 마다 사용 가능한 횟수를 op[4] 라는 배열에 담아논 상태였다. 여기서 +를 사용한다면 op[0]-- 를 -를 사용한다면 op[1]-- 를 하면되는 것 이다. 문제는 DFS를 어떻게 내려갈 것 인가? 였다. 처음에는 4갈래의 길을 반복문을 통하여.......

[알고리즘] 조합 알고리즘 [내부링크]

조합 알고리즘 같은 경우 자주 사용한다는 글로 정리해두는 것 도 좋을것 같아 글을 작성해본다. 조합이란? 간단하게 0, 1, 2, 3, 4, 5 가 있다고 해보자. 이중 숫자 4개를 순서에 상관없이 선택하는 경우는 몇가지가 있는지를 파악하는 것 이다. 순서가 상관없으니, (0, 1, 2, 3) 과 (0, 1, 3, 2)는 같은 경우이다. 이는 DFS를 활용하여 구하면 된다. 생각의 흐름 tree를 그려보면서 생각해 보자. 빨간 선만 따라서 DFS를 진행하면 (0, 1, 2, 3) 이라는 하나의 조합이 나온다. 그다음은 0, 1, 2, 4 또 그다음은 0, 1, 2, 5 까지 진행할 것 이며, 그다음에는 DFS(3, 2)가 호출되어 0, 1, 3, 4가 불러진다. 코드 구현

[백준] 15686번 (치킨 배달) <58> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 총 치킨가게수에서 M개의 가게를 선택해야 한다는 점에서 조합이 떠올랐다. 조합에 관한 다음글을 먼저 읽어주길! 집의 벡터 hs 와 치킨집 벡터 pz를 만든다. input 으로 주어진 정보를 push_bask으로 추가해줘야 한다. 예를 들어 다음과 같은 input이 있다고 해보자. 그러면 hs 와 pz 벡터는 다음과 같을 것 이다. hs : ( {1, 3}, {2, 5}, {3, 2}, {4, 3} ) pz : ( {2, 3}, {3, 3}, {5, 5} ) DFS의 for문을 처음 돌때 index 변수 i는 hs 벡터에서 집을 하나 선택한다. hs[0]은 {1, 3}에 위치한 집을 의미한다. hs[0]을 기점으로 pz 배.......

[네트워크] 어플리케이션 계층의 이론 (ch2) [내부링크]

해당 본문은 대학교 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. Client-Server architecture server 서버는 항상 켜져있는 host이다. 고정된 IP 주소값을 갖는다. 확장을 위한 데이터 센터 역할을 한다. client server와 통신을 한다. 간헐적으로 연결된다. 동적인 IP 주소를 갖는다. 다른이들과 직접적으로 소통하지 않는다. Processes communicating process 는 실행되고 있는 프로그램의 인스턴스 이다. 같은 host 안에서 실행되고있는 process 들은 IPC(inter-process communication)을 통하여 소통한다. 다른 host 간에 실행되고 있는 process 들은 message를 교환해가면.......

[백준] 4963번 (섬의 개수) <59> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 이문제는 뭐 생각이고 나발이고 그냥 바로 DFS 나 BFS 를 생각했는데, 난 BFS 방식을 택하였다. 배열의 모든 칸에 대하여 BFS를 시행해주면 총 섬의 수가 나온다. BFS 에서 큐가 다 비어질때마다 cnt 변수의 값을 1씩 증가시켜주면 총 섬의 수를 구할 수 있다. 예를 들어 다음과 같은 input 이 있다고 해보자. (1, 1)의 지점에서 BFS를 실행하면 (1, 1) -> (2, 1) -> (3, 1) -> (4, 1) 순으로 진행된다. 이렇게 한번 다 돌면 queue에서 모든 원소가 사라지고 이때 cnt변수의 값을 1 증가 시키면 된다. 이번 문제를 풀면서 얻은 교.......

[CPS] 82번 - 순열구하기 (DFS) <54> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 순열 구하기 문제였다. 처음에 DFS 방식을 생각은 했는데, 구현에서 막히는 부분이 조금 있었다. 생각의 흐름 tree 구조를 깊이우선 탐색한다고 생각하면 된다. 가장 root부터 4갈래로 나뉘어 진다. 1번 방향으로 DFS를 진행한다. 이때 check 배열을 만들어 1번은 사용했다고 표시한다. ch[1] = 1 과 같이 말이다. 위에서는 1번은 사용됬기 때문에 X표시 되었다. 이번에는 2번쪽으로 DFS를 할껀데, 2번또한 방문표시를 한후 진행한다. 이제 1, 2, 3 의 순열이.......

[CPS] 83번 - 복면산 (MS 인터뷰) <55> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제는 MS 인터뷰에서 나왔던 질문이다. 사실 나는 복면산 이라는 것을 처음 들어봐서 구글에 검색한 후 무엇인지 알게되었다. 문제 자체는 매우 간단하다. send + more = money 가 되도록 각 알파벳에 해당되는 숫자를 구하는 문제이다. a[10] 이라는 배열을 만들어 사용하였다. 각 알파벳에 해당될만한 수를 DFS 방식으로 배치한 후, 계산하여 맞아 떨어지는 수를 구하는 방식이다. 강의 코드

6월의 시작 [내부링크]

이번 6월 한달도 빡시게 달려볼 준비하자! 내 근황 몇일전 내 생일이였다!! 생일이 다가오기를 소망하면서 사는 성격은 아니지만 그래도 축하해주시는 분들이 있어 감사함을 느꼈다. 생일 기념으로 맛있는 음식들을 먹으러 갔었다!! 고기랑 파스타가 진짜 너무 맛있었다 츄릅... 스테이크에서는 흰색이 계란반숙인줄 알았는데 소스여서 당황했다. 먹어보기 전가지는 무조건 계란인줄 알았다. 파스타도 매운 맛이라 느끼함을 잡아줘서 좋았다. 역시 난 한국인인것 같다. 요놈은 사이드로 시킨 개살샌드 인대 이것도 맛있었다. 메인메뉴를 시키면 주문이 가능하다. 전시회도 방문하였다. 곧 내 인스타 피드에 올라갈것같은 맑은 하늘의 사진이다. 요.......

[백준] 1463번 (1로 만들기) <53> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 cache[n] 을 정수 n을 1로 만드는데 필요한 최소 연산의 횟수라고 가정해보자. cache[n]은 cache[n-1] 을 구한후 1을 더할수도 있고, cache[n]은 cache[n/2] 에다 곱하기 2를 하여 구할수도 있고, cache[n]은 cache[n/3] 에다 곱하기 3을 하여 구할수도 있다. 즉, cache[n]은 cache[n-1], cache[n/2], cache[n/3] 각각의 case 에서 연산을 한번만 더하면 도달할수 있습니다. 우리의 목표는 최소의 cache[n]을 구하는 것 이니 cache[n] = min(cache[n-1], cache[n/2], cache[n/3])+1 이라는 점화식이 완성됩니다. 내 코드

쉽게 배우는 데이터 통신과 컴퓨터 네트워크 [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/05/15 ~ 2021/06/01 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 그냥 네트워크 기초책이다. 별다른 사전지식은 필요없었다. 아 프로그래밍에 대한 경험정도는 필요한것 같다. 인터넷에 대한 이해는 그닥 필요하진 않다. 그냥 컴퓨터를 좀 써봤으면 읽을수 있다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? =&gt.......

[백준] 10819번 (차이를 최대로) <52> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 N이 최대 8인거를 확인한후, 노가다 뛰는 완전탐색으로 진행하면되겠다고 생각하였다. 문제는 배열의 순열을 어떻게 구할것인가? 인데,,, 처음에는 직접 구현하려 했으나... STL 이 있는것을 확인한 후.. 그냥 STL 사용하였다... std::next_permutation 이 함수는 모든 배열의 순열을 구해주는 함수이다. 다만 사용전에 꼭 오름차순으로 정렬해주어야 한다. 예를 들어 배열 1, 2, 3, 4 가 있으면 1 2 3 4 -> 1 2 4 3 -> 1 3 2 4 -> 1 3 4 2 -> ... -> 4 3 2 1 -> 1 2 3 4(false 반환) 마지막에 원래 시작했던 순열로 돌.......

[알고리즘] 다익스트라, 프림 알고리즘의 차이 [내부링크]

다익스트라 알고리즘과, 프림 알고리즘을 공부하면서 전체적인 틀이 BFS와 유사하지만, 약간의 차이점들이 있음을 느꼈다. 이를 정리겸 블로그에 글을 남겨본다. dist[] or d[] 의 의미 차이 통상적으로 두 알고리즘을 설명하는 책 이라면 dist[] 혹은 d[] 배열을 사용하여 알고리즘을 설명한다. 문제는 프림과 다익스트라 모두 dist 배열을 사용하기 때문에 처음 공부하는 입장에서는 같은 의미의 배열인 줄 알고 오해하는 경우가 있기 마련이다. (내가 처음 배울때 그랬다...) 참고로 다음 설명에서 나오는 집합 S는 이미 선택된 정점들의 집합을 의미한다. Prim 에서의 dist[] 프림 알고리즘에서 각 정점에 기록된 값은 해당 정점을 집합S에.......

[CPS] 79번 - 원더랜드 (Prim 알고리즘) <48> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. Prim 알고리즘 자체는 이미 여러번 풀어봐 이해 하고 있다. 다만 그럼에도 글을 남기는 이유는 강의에서 풀이가 나와 조금 다르기 때문이다. 내 코드 나의 코드에서는 우선순위 큐에 삽입하기 전에 방문검사와, 길이가 줄어드는 상황인지를 검사후 해당되면 큐에 넣어주는 방식이다. 하지만 강의에서는 집합 S에 추가된 노드와 연결된 인접 노드들을 모두 삽입해주는 방식을 택하였다. 사실 강의에서의 방식이 좀더 직관적이긴 한데, 중복을 애당초 검사해서 큐에 삽.......

[백준] 11047번 (동전 0) <49> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 문제를 읽고 맨 처음 든 생각은 큰 단위부 사용해야겠다는 생각이였다. 이는 당연한 것 이, 4200 원을 동전으로 나눌때 4200 보다 작으면서 가장큰 단위인 1000원 짜리 동전을 이용하는 것 이 전체 동전의 수를 줄일 수 있기 때문이다. 벡터에 입력으로 동전단위를 전부 받아들인 후, 내림차순으로 정렬하여 큰수가 앞에 오도록 정렬하였다. 이후 우리가 나누려 하는 금액(4200)을 큰수로 나눠서 몫이 0이면 더 작은 단위를 찾아야 하고, 0이 아니라면 해당 숫자부터 이용하여 사용하면 된다. => 즉 매순간 적당한 값을 찾는다는 점.......

[백준] 2875번 (대회 or 인턴) <50> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 우선 처음든 생각은 인턴수 k를 중심으로 반복문을 돌려야 겠다는 생각 이였다. 여자가 n명 남자가 m명인 상황이다. 우선 남자쪽에서 몰빵하여 인턴을 뽑는것을 시작으로, 다음번에는 여자 1명 남자 k-1명, 그다음에는 여자2명 남자 k-2명 이런 방식으로 인턴수 k를 중심으로 반복문을 돌아야 겠다고 생각하였다. 1) n - 0, n - k 2) n - 1, n - (k-1) ... k) n - k, n - (k-k) 이렇게 반복을 돌면서 team의 수를 구해야 한다. 여자 : 남자 = 2 : 1 의 비율로 team을 구성해야하는 상황이니 여자가 남자의 수보다 2배이상 많다면 남자.......

[백준] 9095번 (1, 2, 3 더하기) <51> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 생각의 흐름 처음에 보자마다 DP 류에 속한다는 생각을 못했다. 아직 내가 DP에 관한 문제를 몇게 풀어보지 않아 더 그런것 같다. 그래도 문제를 읽다보면서 느낀순간이 있는데, 하나하나 다 계산해보려면 중복된 경우가 너무 많다는 점 이다. 따라서 이미 계산된 값들은 memoization 을 통해 기억해 둔 후, 이를 재활용 하는 방식을 사용해야 겠다고 느꼈다. 근대 생각해보니 이방식 DP 의 방식이 아니던가... 바로 관계식을 찾으려 노력하려 들었고, bottom-up 방식의 코드를 구현하였다. n의 값은 11보다 작은 양수라 하여 넉넉 잡아 13까지 배열을 만.......

[Django] 모델 필드, ForeignKey [내부링크]

DJango를 공부하면서 간단하게 기억할 내용들만 기록해두는 내용입니다. model을 설계를 공부하던 도중 ForeignKey의 의미를 몰라 잘 이해하지 못하는 부분이 있어 정리할겸 찾아보았다. 관계에는 총 3가지가 있으며 1:N, 1:1, N:N 의 관계로 구별됩니다. 대표적인 1:N의 ForeignKey에 대해서만 일단 공부해보자. ForeignKey ForeignKey는 1대N 의 관계입니다. 대표적인 예시로 게시물과 댓글을 생각할 수 있습니다. 개시물은 1개 이지만, 여기에 달리는 댓글의 수는 N개라 할 수 있습니다. class의 원형은 위와 같으며, 2개의 인자를 넘겨줘야 합니다. models.py 1 대 N 의 관계에서 N인 쪽에서 ForeignKey를 선언해줍니다. 기본적으로 인자는 2.......

[CPS] 75번 - 최대 수입 스케쥴 <42> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 남은 기간이 큰수의 날부터 점점 작은수로 가면서 확인해야한다는 일론은 동일하게 생각했는데, 구현 부분에서 조금 막혔다. 나같은 겨웅 make_pair로 이용하였는데, 강의에서는 연산자 오버로딩을 이용하셨다. 강좌 코드

[CPS] 76번 - 이항 계수 <43> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제는 Top-Down 방식인 Memoization 방식을 활용하여 문제를 해결하였다. 강의 풀이와 내 풀이가 거의 동일하여 내 풀이만 올리도록 하겠다. 내 코드 이전에 계산한 값들을 중복 되어 계산되는 것을 막기위해서 table에 값을 저장해둔다고 하여서 Memoization 이라고 부른다. 이 방식은 재귀함수의 인자를 낮춰가면서 호출한다는 점에서 Top-Down 방식에 해당한다. 이와 대조적인 Bottom-Up 방식의 DP 풀이 또한 존재한다.

[백준] 11051번 (이항 계수 2) <44> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. DP를 활용한 Bottom-Up 방식 풀이의 대표적인 예 이다. 코드를 우선 확인해 보자. 내 코드 binom 행렬은 다음 그림과 같은 모양으로 구성된다. 우리가 원하는 값은 nCk 이니 각 열의 index인 j는 i 까지만 증가하면 된다. 즉 대각선 을 이루는 경계 까지만 값을 구하면 된다. 또 답에 해당하는 k 까지만 구하면 되기 때문에 j는 k까지만 증가하면 된다. 이런점을 고려하여 다음 코드가 나온 것 이다. 또한 DP를 구성할때 행 우선순서로 계산해야 한다는 점 또한 중요하다. 위의 사진에서 6C4 를 구한다고 해보자. 빨간 별표 지점이다. 6C4를 구하기 위해.......

[백준] 1476번 (날짜 계산) <45> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 완전 탐색에서 brute-force 방식의 하나하나 검증하는 문제였다. 다만 생각할 부분이 조금 있는 문제였다. 생각의 흐름 처음에 이 문제를 일고 한 생각은 어떠한 숫자 하나를 3가지 다른 방식으로 표현한다고 생각했다. A라는 수를 3가지 방식으로 표현하는 것 이다. E 의 경우 15 단위로 주기가 도니까, A = 15 x ? + E 가 될것 이고, S 의 경우 28 단위로 주기가 도니까, A = 28 x ? + S 가 될것 이고, M 의 경우 19 단위로 주기가 도니까, A = 19 x ? + M 가 될것 이다. 문제에서는 각각 E, S, M 에 해당된는 수를 input으로 준다. 여.......

[백준] 1107번 (리모컨) <46> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 이번문제는 완전탐색이라고 처음에 딱 느껴지지가 않아서 더 문제였다.... 생각의 흐름 우선 다음 예 를 통해 확인해 보자 위의 입력 값에서 가능한 경우로는 5455 를 누른후(4번), +를 2번 눌러서 총 6번을 눌러 해당 5457에 도달한다고 할 수 있다. 먼저 check 함수를 만들었다. 해당 함수는 인자로 넘어온 숫자가 정상적인 버튼 만으로 누를 수 있는지를 판별해 준다. 가령 5455 를 넘겼다 해 보자. 길이는 4가 된다. i가 0부터 3까지 돌면서 인자로 넘어온 각 숫자의 자리마다 정상적인 버튼으로 누를 수 있는지를 확인한다. 만약 여기서 걸린다면 f.......

[알고리즘] Union Find 알고리즘 (경로 압축) [내부링크]

기존에도 Union Find 알고리즘을 사용하기는 했지만, 경로 압축을 하고있지 않아 시간이 조금더 걸리는 문제가 있었다. 간단하게 경로압축을 할 수 있는 방법을 배워 글을 써본다. Union & Find 기본적인 Union Find 알고리즘의 구성은 다음과 같다. 맨 처음 parent 배열에서 각각은 자기 자신의 번호를 갖고 시작한다. 다음 숫자들이 Union 연산을 순서대로 진행한다고 해보자. 1 2 가 Union 연산을 진행한다. Union(1, 2) 2 3 3 4 4 5 6 7 7 8 8 9 이 상황을 Tree 로 묘사하면 다음과 같다. 5번과 9번 자기 자신을 root로 하는 tree가 2개 생겼다. 1번 원소를 보면 2번 원소를 화살표로 가리키고있다. 이는 배열에서 1번 칸에 숫자 2가 담.......

[백준] 11728번 (배열 합치기) <47> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 사실 간단해서 풀이라고 할점은 따로 없는 것 같다. 내 코드

[Django] CSS, BootStrap, Form <day3> [내부링크]

DJango를 공부하면서 간단하게 기억할 내용들만 기록해두는 내용입니다. 점프 투 장고 에서 발최한 내용들 입니다. CSS 웹 페이지에 CSS를 적용해 좀더 이쁘게 꾸며볼수가 있다. CSS를 우리가 만들고 있는 pybo에 적용하려면 CSS 파일이 스태틱(static) 디렉터리에 있어야 한다. 장고는 CSS파일을 static 파일로 분류한다고 한다. 1) 설정 파일에서 static 디렉터리의 위치를 추가해줘야 한다. config/settings.py 파일을 열어 다음과 같이 수정해주면 된다. 2) static 디렉터리 생성하기 위에서 코드에서 등록해준 static이라는 디렉터리가 아직 존재하지 않는다. 따라서 디렉터리를 생성해주면 된다. 3) CSS 작성 static 디렉터리를 만들었으면.......

[CPS] 68번 - 최소비용 <40> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번문제는 그레프에서 최단 경로를 구하는 문제였으며, 나같은 경우 알고있던 다익스트라 알고리즘을 사용하여 해결하였다. 다만 강의에서의 의도는 그레프를 인접리스트로 표현한다는 점에 중점을 맞춰 강의하셨다. 별다른 알고리즘은 아니고 모든 정점을 탐색하는 방식의 알고리즘을 보여주셨다. 이번 문제를 기록하는 이유는 STL::pair 에 대하여 내가 생각못하고 있던 부분이 있었기 때문이다. 여지까지 다익스트라에서 새로운 노드를 선택할때 우선순위 큐에.......

[Django] 내비게이션바, include <day4> [내부링크]

DJango를 공부하면서 간단하게 기억할 내용들만 기록해두는 내용입니다. 점프 투 장고 에서 발최한 내용들 입니다. Form에 bootstrap 적용하기 질문 등록 테그를 만들던 도중에 부트스트렙을 적용시킬 방법을 모르겠었다. 질문용 html 파일을 보면 {{ form.as_p }} 라는 부분이 있는데, 모델 폼과 연결된 입력 항목 subject, content에 값을 입력할 수 있는 HTML 코드를 자동으로 만들어 준다. 하지만 부트스트렙 적용이 문제였다. 이쁘지가 않았다. 여기서 widgets 속성을 등록해주면 사용할수가 있었다. 네비게이션 바 추가 네비게이션 바는 모든 페이지에서 항상 보여야 한다. 이말은 즉슨 base.html 템플릿을 수정하면 된다는 의미이다. 메인.......

[Django] pagination, 템플릿 필터, 로그인, 로그아웃 <day5> [내부링크]

DJango를 공부하면서 간단하게 기억할 내용들만 기록해두는 내용입니다. 점프 투 장고 에서 발최한 내용들 입니다. 페이징 기능 만약 한 페이지에 대한 게시물의 수가 제한이 없다면, 한 페이지이에 300개 이상의 글이 보여질수도 있다. 이를 방지하고자 페이지 마다 일정한 수의 게시물만 보여고, 하단부에 페이지 번호로 이동이 가능하도록 해보자. 1) 페이지 분할 우선 page = request.GET.get('page', '1') 을 보면 GET 방식으로 요청받은 URL로부터 페이지 값을 갖어온다. 여기서 get('page', '1') 은 /pybo/ 와 같이 페이지번호가 없는 주소를 위해 기본값으로 1을 지정한 것 이다. Paginato.......

[CPS] 71번 - 송아지 찾기(상태공간트리) <41> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 내 풀이 방식대로 적용하니 타임아웃이 발생하는 예시들이 있었다. 아직 이유는 못찾은... 찾았다... 확인용 체크 배열을 범위를 10001 까지 해야한는데... 1001 까지만 잡았더라.... 내 코드 사실 내 풀이가 어느부분이 잘못된건지 잘 모르겠다. 문제가 DP류의 smell이 나서 중복된 값을 거르기 위해 ch배열을 두어 해당 거리를 방문했을때 1로 바꿔버려 재방문시 queue에 삽입 못하도록 하였다. 왜 time-out이 나는걸까... 아직 의문이다... 강좌 풀이 강의에서의.......

[Django] render, redirect <day6> [내부링크]

DJango를 공부하면서 간단하게 기억할 내용들만 기록해두는 내용입니다. 점프 투 장고 에서 발최한 내용들 입니다. 책을 보며 공부하다보니 API에서 return 할때 redirect와 render의 차이가 궁금했다. 대략적인 감으로는 render는 영어의 의미를 살려 html 화면을 가공해주는 느낌? 이라 생각했고, redirect는 원하는 주소로 되돌아가는 것이라 생각했다. 정확한 의미를 알아보자. render render는 API의 반환값으로 template를 지정합니다. render는 여러 parameter를 갖는데, 이 중에서 request 와 template_name 은 필수적으로 필요합니다. request 는 항상 맨 첫 인자로 넘겨주고, template_name 은 불러오고 싶은 템플릿을 넘겨줍니다. ren.......

[자료구조] Priority Queue, Dijkstra [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 이번시간에는 우선순위 큐 (priority queue)에 대하여 배웠다. 일반적인 queue는 후입 선출의 과정, 즉 먼저 들어간 원소가 먼저 나오는 방식이지만 우선순위 큐는 각 원소마다 우선순위가 정해져서, 우선순위가 높은 원소부터 먼저 나오는 방시이다. Priority Queue Queue 이긴 한데, 원소들이 우선순위를 갖고있다. 우선순위가 높은 원소가 먼저 나온다. 가능한 배열 구현 종류 - Sorted by priority : 빠른 삭제연산, 하지만 삽입이 느리다. - Unsorted : 빠른 삽입연산, 하지만 삭제가 느리.......

[CPS] 65번 - 미로탐색 <39> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 그렇게 어려운 문제는 아니여서 원래는 코드를 안올리려고 햇는데, 독특한 부분이 있어 이를 기억하고자 글을 작성한다. 단순 경로를 찾는 것 이 아니라, 모든 경로의 수를 찾아야 하기에 방문표시를 했던 장소를 다시 방문하지 않음으로 표시하는 상황이 재미있었다. 내 코드 내 코드에서도 보면 다음과 같은 부분이 있다. visited[xx][yy]를 다시 0으로 매꾸는데 이부분이 꼭 필요하다. 만약 방문표시를 제거하지 않으면 처음 경로1을 탐색할때 목적지가 방문표시.......

[Django] Admin, render, template <day2> [내부링크]

DJango를 공부하면서 간단하게 기억할 내용들만 기록해두는 내용입니다. 점프 투 장고 에서 발최한 내용들 입니다. Admin Admin은 간단하게 서버관리자 계정이라고 생각하면된다. 1) 슈퍼 유저 생성하기 우선은 슈퍼 유저를 생성해야 한다. 명령 프롬포트에 다음과 같이 입력하여 보자. 이렇게 하면 관리자계정이 생성됬다고 볼 수 있다. 2) Admin에 접속하기 장고 개발 서버를 구동한 후 localhost:8000/admin에 접속해 보자. 위의 사진과 같이 로그인 창이 뜬다. 바로 직전에 만든 계정정보를 사용하여 로그인 해주면 아래과 같은 화면이 나온다. (나같은 경우 미이 모델을 하나 등록해놔서 PYBO라는 앱이 보인다. 하지만 원래는 앱이 보이지 않.......

[CPS] 62번 - 병합정렬 <38> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제는 단순 병합정렬을 하는 문제였다. 병합정렬은 이미 많이 구현해봤기 때문에 쉽게 해결하였다. 다만 글을 쓰는 이유는 강의에서의 코드와 내코드가 다른 부분이 있기 때문이다. 내 코드 나는 merge를 따로 구현하여 mergeSort함수가 wrapper 함수가 되도록 구현하였다. 강의 코드 merge라는 함수의 내용을 그냥 divide(내 코드에서는 mergeSort) 라는 함수 안에 구현하셨다.

[Django] 프로젝트 생성, URL-view, 데이터 관리 모델 <day1> [내부링크]

DJango를 공부하면서 간단하게 기억할 내용들만 기록해두는 내용입니다. 점프 투 장고 에서 발최한 내용들 입니다. Django 란? 웹 프로그래밍을 위한 프레임워크 이다. Python을 기반으로 손쉬운 웹서버를 구현하도록 도와주는 도구라고 생각하면된다. Flask라는 python기반의 도구도 있는데 Flask는 가볍고, 제약사항이 적은대신 모든 부분을 개발자가 직접 구현해야한다는 단점이 있다. 이에 반해 Django는 제약 사항들이 있고, 자유도가 적은대신 프레임워크테서 제공해주는 툴을 사용하면 하나한 구현하지 않아도 금방 만들수 있다는 장점이 있다. 프로젝트 시작 명령프롬포트 를 실행한 상태에서 프로젝트를 만들 디렉토리로 이동한 후, 다.......

[자료구조] AVL Tree, 2-3 Tree [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 이번 시간에는 AVL-Tree에 대하여 배웠다. AVL-Tree 는 BST가 최악의 경우 linked-list 처럼 이어저 O(n)의 시간복잡도의 성능을 보여준다는 단점을 보완하는 tree이다. AVL-Tree의 직관적 이해 다음 그림을 통해 AVL-Tree가 어떻게 보정 작업을 하는지 살펴보자. 왼쪽의 경우 root 노드인 6을 기준으로 왼쪽으로 node들이 치우쳐 있는 모습을 볼 수 있다. 이 tree의 H(높이)는 4에 해당한다. 이를 AVL-Tree의 정의에 부합하도록 보정 작업을 해주면 root가 바뀌면서 H가 3으로 변경이 가능해진다. N개의.......

[자료구조] 2-3-4 Tree, Red-Black Tree [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 이번 시간에는 2-3 Tree의 확장 버전인 2-3-4 Tree에 대하여 배웠으며, 이를 Red-Black Tree로 표현하여 보았다. 2-3 Tree가 궁금하다면 이전 글을 먼저 확인해보길 권장한다. 2-3-4 Tree 각 Node는 1, 2개 또는 3개의 key값을 갖는다. 각 Node는 최대 4개의 child를 갖을 수 있다. 각 Node들은 chlid를 1개만 갖을수는 없다. 아예 없거나 or 2, 3, 4개의 child를 갖어야 한다.\ Root에서 모든 leaf노드 까지의 거리가 같다. 노드의 수가 N일때 2-3-4 Tree의 높이는 O(logN)이다. 이를 이.......

[CPS] 61번 - 특정 수 만들기 (MS 인터뷰 문제) <37> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제같은 경우 지난 부분집합의 합을 구하는 문제의 연장선에 있는 문제이다. 이번에는 +, -, 아무것도 안함 으로 총 3가지의 경우가 있으니 이진 트리가 아닌, 삼중트리 를 생각하면서 해결하면된다. 내 코드 각 노드별로 진행 가능한 방향은 +를 하거나, -를 하거나, 아무것도 안하거나 만 가능하다. 따라서 DFS를 진행하면서 총 3가지 방식을 적용하면 된다. 이후 마지막 level에 도달하면 전체의 합을 구하여 우리가 원하는 값과 비교하면 된다. 맨처음에.......

[CPS] 60번 - 합이 같은 부분 집합 (아마존 인터뷰 문제) <36> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 시간의 문제는 아마존 인터뷰에서 나왔던 문제라고 하셨다. 풀이방식은 다행이도 생각이 나서 해결하였는데, 강사분으 풀이와는 핵심은 같지만 조금은 다른 방식으로 해결하였다. 내 코드 나는 숫자를 담는 vec와 해당 숫자를 사용하는지 유무를 판단할 ch 를 사용하여 해결하였다. DFS를 쭉 해가다가, 마지막 level에 도달했을때 ch벡터를 확인하여 1이 있는 부분의 합 a와 0이 있는 부분의 합 b를 비교하여 같다면 yes를 아니면 no를 출력하는 방식의 풀이였.......

[백준] 11005번 (진법 변환 2) <33> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 이번문제는 인프런에서 강의를 듣고있는 CPS 문제풀이 강좌에서도 나온 문제라 백준에서도 풀어보았다. 진법 변환 자체는 간단한 문제이다. 다만 나머지가 10이상일때 문자로의 변환 방식을 익히고자 글을 써본다. 내 코드 나의 풀이에서는 나머지 10을 기준으로 10이하인 경우 : 그냥 나머지를 stack에 push해줌 10이상인 경우 : 나머지에서 10을 빼준후 ASCII에서 A에 해당하는 정수를 더해준다. 강좌 풀이 강의에서는 10을 기준으로 나머지를 구별하지 않았다. 그냥 전부 stack에 push한후 pop으로 빼면서 이 값을 index로 활용하여 str이라는 배열에.......

[CPS] 55번 - 기차 운행 (stack 활용) <34> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제같은 경우 나의 풀이와 강사분의 풀이가 거의 100%로 일치하여 놀랐다. 내 코드 stack에 우선 받을 숫자를 삽입 한 후, cnt라는 변수와 비교한다. cnt와 값이 같다면 바로 pop을 해주면서 string에 O를 저장해주고, cnt 변수값을 1 증가시켜주고 cnt와 값이 다르다면 break하여 바로 다음 숫자를 다시 입력으로 받아들이면 되는 문제였다.

[CPS] 59번 - 부분 집합 (MS 인터뷰 문제) <35> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 맨처음에 문제를 보았을때는 쉬운 문제라 생각이 들었다. 하지만 막상 내가 당연하다 느낀 부분집합들을 코드로 구하려 하니 어떠한 방법을 적용해야 할지 생각이 나지 않았다. 이번 문제같은 경우 bit-vector를 하나 만들어서 체크를 해가면서 출력해주면 부분집합을 구할 수 있는 문제이다. 강좌 코드 예시로 3을 인자로 받았다고 해보자. num은 3이 되며, 재귀함수 D는 1부터 시작한다. bit-vector를 하나 만들었다 해보자. 총 3칸을 갖고있다. 맨처음에는 전부.......

쉽게 배우는 알고리즘 [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/03/25 ~ 2021/05/12 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 이책은 알고리즘을 깊게 설명해주는 책 이다. 기본적인 자료구조에 대한 충분한 이해가 필요하다. 더 나아가 이미 알고리즘을 어느정도 접해본 분이라면 더욱 배워갈점이 많은 책 이다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => 단순 코.......

[CPS] 51번 - 영지 선택 (DP) <32> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 주어진 범위 내의 오렌지수가 가장 많은 영역을 선택하는 문제이다. 사실 brute force와 같은 4중 for문 방식으로 접근하면 모든 경우를 다 확인하면서 진행하기에 해결은 가능하지만 제한시간 1초에걸려버린다. 이러한 for문에서의 문제점은 중복된 값을 계속 다시 계산한다는 점 이였다. 이를 해결하기 위해 DP 방식을 적용하여 풀어야 해다. 특히 bottom-up 방식으로 문제를 해결해 나가야한다. 강좌 풀이 이 문제를 해결하기 위해서는 dy라는 배열을 따로 만들.......

[CPS] 49번 - 블록의 최대값 <31> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제의 경우 나의 풀이방식이 선생님의 방식보다 좋았다고 생각한다. 강의에서는 2차원 배열을 만들어 칸을 채워가는 방식으로 해결하였는데, 사실 2차원 배열을 만들필요가 없다. 최대 블록의 합을 결과로 출력해야하니 합만 구하면 되는 문제다. 내 코드 vector를 2개 만들어 입력값의 1행과 2행을 읽어들인다. 예를들어 a(2, 0, 3, 1) 과 b(1, 1, 2, 3)이 만들어졌다고 생각해 보자. 2차원 배열 map 있다 생각해보면 map[0][0]는 a[0]과 b[3]의 비교 결과 작.......

[자료구조] Binary Search Tree [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 이번 시간에는 이진탐색트리 에 대하여 배우는 시간이였다. 이진탐색의 방식으로 만들어진 트리라고 생각하면 쉽다. 크게 Search, Insert, Delete 3가지 기능이 필요한데 Delete의 경우 삭제할 Node의 자식이 몇명인지에 따라 case가 나뉜다. 우선 Skip List에 대하여 간단하게 살펴보자. Skip List Skip LIst란 여러 node를 건너뛸 수 있는 Linked List를 말한다. 이를 활용하여 중간 지점으로 건너 뛸 수 있다면, 이진탐색의 방식을 Linked List에서도 사용이 가능해질 것 이다. 하지만 insert, delete와.......

5월의 근황 [내부링크]

벌써 5월 중순이다... 내 근황 사정이 있어 요즘 코딩을 할수가 없었다. 아예 안할수는 없어서 알고리즘 책 딱 한권만 계속읽어 완독하였다. 몇일내로 알고리즘책의 후기도 올릴예정이다. 얼마전 천안에 놀러갔을때 찍은 사진이다!. 천안은 처음가보는지라 어디를 가볼까 하다가 대학교 들이 있기에 탐방해봤다. 단국대도 처음가봤는데 호수가 엄청 컸다. 호수 근처의 카페도 가보고 재미있었던 하루였다!. 최근에는 동대문 DDP에서 하는 전시회도 구경하러 갔다! 빛을 활용한 전시?? 뭐라 설명을 잘 못하겠는데 재미있었던 전시회였다. 약간 분위기가 오묘했다. 기본적으로 전시회장 내부는 어두웠으며 이는 빛을 활용한 전시회이기 때문에이다.......

[백준] 1158번 (요세푸스 문제) <30> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 이번 문제는 요세푸스(조세푸스) 알고리즘을 적용하면 금방 풀리는 문제였다. 사실 알고리즘이라고 하기에는 좀 애매해서 그냥 조금만 생각하면 바로 풀수 있었다. 내 코드 input으로 사람의 수 7명, key값으로 3을 받았다고 해보자. 우선 사람의 수만큼의 배열을 만든다. 그리고 그 칸들을 전부 0으로 초기화 한다. 1번자리부터 cnt변수를 증가시켜가면서 key값(3)과 cnt값이 동일해질때마다 해당 배열의 값을1로 변경한다. 처음 변경되는 자리의 index는 3일 것 이다. 다시 cnt변수를 초기화 한 후, 증가시키면서 key값과 일치할때까지 진행한다. 그러.......

영리한 프로그래밍을 위한 알고리즘 강좌 [내부링크]

인프런 - "영리한 프로그래밍을 위한 알고리즘 강좌" 강의를 바탕으로 후기를 남겨봅니다. 자료구조 공부 이후 알고리즘 공부를 위해 여러 정보를 모으던 중에 내가 이미 구매한 문병로 교수님의 쉽게 배우는 알고리즘 이라는 책을 주 교제로 사용하시는 강좌가 있었으니, 바로 권오흠 교수님의 알고리즘 강의였다. 처음부터 우선 강의 해주시는 분이 교수님인 강좌들만 찾아보니 많지는 않지만 몇몇 교수님들의 무료강좌들을 찾을 수 있었다. 주니온TV(경북대강의), 한양대강의, 권오흠(부경대), 건국대강의까지 총 4개의 선택로에서 권오흠 교수님의 강의를 뽑은 이유는 간단했다! PPT를 제공한다! ppt를 제공한다는 점이 생각보다 중.......

[CPS] 46번 - 멀티태스킹 (카카오 먹방 문제) <31> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제는 원래 카카오채용에서 나온 먹방문제를 변형한 문제였다. 사실상 풀이의 핵심이 같아 두 문제 모두에 적용이 가능하였다. 또한 직전에 풀어본 요세푸스 문제와 동일한 논리로 풀면 해결가능하다. 강좌 코드 우선 배열을 만들어 각 작업마다 필요한 시간을 읽어들인다. 각 시간이 적힌 배열이 생성될 것 이다. 예를 들어 3 1 2 3 5 를 읽어 들인다고 해보면, 총 3개의 작업이 각각 1,2,3초가 필요하며 정전이 나는 시간은 5초시점에 정전이 나는 상황이다.......

Effective C++ (이펙티브 C++) [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/02/25 ~ 2021/04/16 <리뷰 순서> 1) 책의 표지 2) 단원별 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 이책은 C++을 이미 충분히 숙지한 사람을 대상으로한 자료구조 기본서 이다. 기본 문법사항들은 알고있어야 한다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => C++에 대한 깊은 이해를 돕는다. 내부 작동원리와 많은 tip들, 더 나아가 설계.......

[CPS] 37번 - Least Recently Used (카카오 2018) <25> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번문제는 실제로 카카오에서 2018년도 입사문제로 나왔던 문제다. 애당초 기업에서 공개한 문제에 한하여 문제도 같이 적어봅니다. 혹시나 흥미가 생겨 풀어볼 분이 있을수도 있으니! 문제 나의 코드 강좌 코드와 내 코드가 거의 동일해서 내 방식으로 구현한 버전만 올려봅니다. 사실 처음에는 STL::vector 사용하려 했는데, erase 쓰고 한칸씩 뒤로 밀고, push_back하고 등등... 은근 이게 더 귀찮은 것 같아서 STL을 지양 하는 방향으로 구현하였습니다. 코드.......

[CPS] 38번 - Inversion Sequence <26> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제의 핵심은 뒤에서부터 접근하는 점이 핵심이였다. 다행이도 난 한 20분 정도 고민한 결과 뒤에서부터 삽입정렬을 적용하면 해결된다는 점을 느껴 강의를 보지않고 문제를 해결할 수 있었다. 다만 난 배열의 앞에서부터 추가해 나가는 방식이였는데, 강사분은 뒤에서 부터 추가하는 방식을 취하시더라. 이건 뭐 미묘한 차이이니 핵심원리가 같았으니 된것 같다. 내 코드 나는 8부터 읽어오면서 해당 숫자의 역접수가 0인 경우에는 맨 앞에 추가를, 0이 아닌.......

[백준] 2737번 (연속 합) <27> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 기존에 공부하던 CPS 강의에서 이 문제를 풀어본 경험이 있다. 약간 다르지만 거의 유사한 문제였기에 동일한 논리를 적용하여 푸니 바로 해결할 수 있었다. 내 코드 예를 들어 15라는 숫자를 연속됫 자리의 수로 표현이 가능한지? 또 가능하다면 몇개인지를 count 해야 한다고 해보자. 우선 2자리 이상의 숫자의 합 이라고 했으니 15에서 1,2를 뺸다. 그럼 12이 남는다. 이 12을 2로 나눈다. 2로 나눈 이유는 1과2가 숫자 2개이기 때문이다. (12%2) 는 0이다. 따라서 1과 2에 동일한 값(12/2)을 더해줄 수 있다. 핵심은 1과 2에 동일한 배분을 해주어야.......

[자료구조] Linked List [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 이번 시간에는 연결리스트(Linked List)에 대하여 배웠다. 사실 연결리스트만 해도 내가 직접 구현해본 경험이 이미 여러번 있고 쉬운내용이라 이해하는데 어렵지 않았다. 윤성우 열혈, C++로쉽게풀어쓴 자료구조, 알고리즘책 등등 이미 많은 책에서 자주 접했던 내용이다. 구현부분은 조금 대충한 느낌이 있는데... 예전 글에서 더 정성스럽게 구현한 경험이 있으니... 이 글에서는 돌아갈정도만 구현하는걸로.... Linked List 연결리스트 란 노드를 data 와 다음 노드를 가리킬 포인터로 구현하여 연속.......

[CPS] 43번 - 뮤직비디오 (이진탐색응용) <28> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 사실 이번문제를 보고 이진탐색을 사용할 생각조차 하지 못했다. 문제를 보자마자 이분탐색을 써야겠다는 느낌이 드는 문제는 아니였기 때문이다.(나만 그런가??...) 강좌 코드 1) 우선 문제의 답이라 생각되는 것을 사전에 정한다. 2) 우리가 가정한 답과 input값을 비교한다. 3) 우리의 답이 클 경우, 우선 정답으로 간주. 재귀 진행 4) 우리의 답이 작을경우, 정답이 아님. 나머지 부분 재귀 진행 가령 3개의 DVD 로 나눠 담아야 한다고 해보자. input으로는 1 2.......

[백준] 2805번 (나무 자르기) <29> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 이번 문제는 파라메트릭 알고리즘을 이용한 문제이다. 파라메트릭 알고리즘은 이진탐색의 실질적인 응용버전 이라고 할수있다. 이 알고리즘에 관한 정리글을 기회가되면 업로드 하겠다. 내 코드 문제의 접근 방식은 우선 답이라 가정되는 값을 선택한후, 대상과 비교후, 가정한 값이 클경우 더작게, 작은경우 더 크게 잡아가면서 이진탐색 방식으로 답을 찾아가는 방식이다. 부르는 명칭은 파라메트릭 서치 이다. 우선 가능한 가장 낮은 높이를 1로 잡고 변수 l에 담고 input으로 받은 값들중 가장 큰 나무의 높이를 받아서 r이라는 변수에 담는다. 가령.......

[알고리즘] Red-Black Tree (레드 블랙 트리) [내부링크]

스스로 공부해 본 후, 다시 정리하는 내용의 글 입니다. 틀린부분과 실수가 있다면 지적해주시면 감사하겠습니다. 레드 블랙 트리 또한 binary-search tree(이진탐색트리) 의 일종이다. 기존의 이진탐색트리 같은경우 input이 이미 정렬되있다면 높이가 n이 되버리고, 따라서 시간복잡도 또한 O(n)에 도달하게 된다. 하지만 레드 블랙 트리의 경우 특정 조건을 지키면서 균형잡힌 이진트리가 되기때문에 Search, Insert, Delete 연산을 최악의 경우에도 O(logN) 시간안에 가능하도록 해준다. 이번 포스트의 순서는 다음과 같다. 1) NIL node 의 설명 2) Red-Black tree의 정의 3) Red-Black tree의 높이 4) Left and Right rotation 5) Insert 연.......

[자료구조] Equivalence Relation [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 이번 시간에는 Equivalence Relation(동치관계) 에 대하여 배웠다. 이산수학에 나오는 내용으로 그레프 이론과 연계되는 것 같다. 우선 relation에 대하여 알아본 후, Equivalence Relation에 대하여 알아보자. Relation 우선 relation이란 다음과 같다. 이를 좀더 해석해보면 Relation이란 한 집합 위에서 정의되는 관계를 말한다. 처음들어서는 명확하지 않다. 좀더 구체적으로 우리에게 A라는 집합이 주어졌다고 가정해보자. 여기서 relation은 AxA의 subset(부분집합)을 의미한다. |A| = n 이라.......

[CPS] 30번 - 3의 개수는? (구글 인터뷰) <23> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번문제는 실제로 구글 입사 면접에서 나왔던 문제다. 원래 이 강좌에서 푸는 문제들 자체를 올리지는 않는데, 이 문제같은 경우 애당초 문제가 구글에서 공개되있는 문제고, 다른 분들도 풀어볼 기회가 있으면 좋을 것 같아 문제 자체도 같이 올려봅니다. 문제 자연수 N이 입력되면 1부터 N까지의 자연수를 종이에 적을 때 각 숫자 중 3의 개수가 몇 개 있는지 구하려고 합니다. 예를 들어 1부터 15까지는 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1,.......

IT 개발자의 거의 모든 것 [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다. <읽은기간> 2021/04/01 ~ 2021/04/10 <리뷰 순서> 1) 책의 표지 2) 책의 구성 3) 읽은소감 우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다. Q 이 책을 읽기 전에 필요한 수준/ 지식은? => 그냥 IT에 관심만 있으면 된다. Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까? => 흔히 말하는 "현업" 의 상황을 조금은 사실적으로 알려준다. 회사 내에서의 일이 돌아가는 방식과, 하청이 어떻게 이루어지는지, 또 어느 분야에서 무엇.......

[CPS] 35번 - Special Sort (구글 인터뷰) <24> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 숫자들을 sorting하되, 숫자들관의 위치는 유지하면서 stable sorting을 해야하는 문제였다. 사실 버블 정렬을 사용하면 간단한 문제였는데, 버블 정렬을 사용해야하는 느낌을 받지 못해 다르게 푼 것 같다. 내 코드 시간 복잡도를 N^2이 아닌 N안에 해결하고 싶었다. 물론 vector를 2개 사용해야하는 점이 있지만, 내 방식으로 풀면 O(n)안에 가능했다. 강좌 코드 강좌에서는 버블정렬을 사용하여 음수들을 계속 앞으로 당기는 방식을 구현하였다.

[CPS] 28번 - N!에서 0의 개수 <22> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 입력값이 10만 까지 가능한 상황이였다. 진짜 10만 펙토리얼을 구해서 연속된 0의 개수를 구하려 들면 int나 long long으로도 담을수가 없는 범위의 숫자였다. 이를 해결하기 위해 이전 문제에서 배웠던 소인수 분해를 사용해야 했다. 내 코드 강의 코드 강의 코드 또한 약간은 변경하였다. 핵심은 2와 5에 달려있다. 어떤 수, 가령 213 이 있었다 치면 이 수에 10을 곱하면 0이 늘어난다. 따라서 10을 만들 수 있는 2와 5의 수를 counting 한 후 더 적은 수를 출력.......

[CPS] 24번 - Jolly Jumpers (Waterloo local 2000) <18> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제의 출처는 Waterloo local 2000 이라고 하셨다. 코드 논리에 있어서 강사분과 거의 동일 했지만, 범위값 내부여야한다는 점을 잡지 못해 time_out이 발생하였다. 내 코드 우선 직전 문제에서 풀어봐서 prev와 now변 수를 잡고 for 문이 한번 도는동안 처리가 가능함을 느꼈지만, 첫번째 for문에서 입력을 받아들여 배열을 만들고, 두번째 for문에서 연산을 하는 방식이 편하다 생각하여 위와같이 구성하였다. 내가 생각하지 못한 부분의 생각은 다음 코드.......

[CPS] 25번 - 석차구하기 (brute force) <19> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제를 통해서 brute force라는 방식에 해당한다. 이에 관하여 정리되 있는 다른 브로그의 글 또한 읽어보았다. 이번문제같은 경우 간단한것 같은 문제임에도 불구하고 효율적이라 생각되는 방법이 떠오르지 않아 해결하지 못했었다. 바로 강좌를 보게된 문제이다. 비효율 적이라고 생각했던 방식은 우선 점수 별로 sorting한후 높은 점수부터 읽어들이면서 점수를 배열에서 find하여 해당 점수를 등수를 증가시키는 방식을 생각했지만... 생각이 구리다고 생.......

코딩테스트에서의 효과적인 C++ 코드 작성 팁 [내부링크]

해당 본문의 원문의 출처는 Geeks for Geeks 입니다. 이과생이 공부겸 번역한 딱딱한 어투의 글 입니다. 문제가 될시 삭제하겠습니다. 가끔 해외 유튜버들이 compatitive한 대회에서 C++코드를 작성할때 macro를 사용해서 반복문 사용을 효과적으로 하거나, auto를 사용하는 방식등... 알면 좋을수 있는 코딩 tip들이 궁금하여 찾아보았다. 역시 Geeks for Geeks는 진리다! 1. Using Range based for loop 이 방식은 C++11에서 매우 멋진 방식이며, 만약 너가 처음부터 끝까지 반복문을 돌고싶다면 효과적인 방법이 될 것 이다. 다음 코드는 어떤 방식으로 array나 vector에서 반복을 돌기위해 loop의 범위를 사용하는지 보여준다. 결과값은 다음.......

[자료구조] Stack & Queue [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. Stack Insert / Delete만 제공한다. search가 없다. push를 통해 data를 추가하고, pop을 통해 data를 삭제한다. 마지막에 추가한(push) data가 먼저 삭제되기때문에 Last in First out 줄여서 LIFO 라고도 부른다. Push와 Pop모두 상수시간안에 진행된다. O(1) stack을 구현할때는 다음에 넣을 자리를 가리키는 stack pointer가 하나 필요하다. 위의 사진에서 예를들어 2를 막 push한 상황이라면 2의 위를 stack pointer가 가리키고 있을 것 이다. Queue Insert / Delete만 제공한다. .......

[CPS] 26번 - 마라톤 (한국정보올림피아드) <20> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 이번 문제는 지문이 좀 길어서 읽으며 이해하는데 시간이 조금 걸렸다. 다행이 풀이는 내풀이와 강사님의 풀이가 동일했으며추가적으로 geeksforgeeks에서 배운 코딩 팁들을 활용하였다. 내 코드 강좌 코드 강의에서는 등수를 저장하는 배열을 나처럼 따로 만들지 않고 그냥 바로바로 출력하였다. 생각해보니 내방식에서도 배열을 따로 만들필요가 없었다.

[CPS] 27번 - N!의 표현법 <21> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 내용자체가 어려웠기보다는 소인수가 뭔지 생각이 안났던점이 더 큰일인것 같다. 나름 이과부심 있고... 수학도 좋아하는 편인데.... 소인수 라는 단어 자체가 언제 들었는지 기억도 안날정도로 예전에 들어본것 같다. 내 기억이 정확하다면 고등학교에서 N수 하는 내내 소인수분해 라는 단어를 들어본 기억이 없다. 다만 그 소인수 분해의 원리는 항상 이미 하고있었던 방식이였다. 강좌 코드 강사분의 코드를 조금씩 변경하여보았다. 만약 5! 을 소수로 표현해야.......

[알고리즘] 섹션2 순환 (Recursion) [내부링크]

인프런 - "영리한 프로그래밍을 위한 알고리즘 강좌" 강의를 바탕으로 인상깊은 내용만 가볍게 정리한 기록입니다. 1) 섹션2 이번 단원에서는 Recursion(재귀)에 대하여 집중적으로 배웠다. 순환의 개념과 기본 예제 문자열 출력하기 기억에 남는 예제중 하나인 문자열 정상 출력과 뒤집어 출력해보는 예제가 있었다. 정상 출력 부터 먼저 코드를 확인해 보자. 우선 함수의 호출 순서를 보면 printf()를 먼저 호출한 후에 printChars() 재귀함수를 호출한다. 즉, 먼저 앞글자를 호출 한 후 다시 뒤의 글자들은 printChars(str+1)에서 알아서 호출해 준다. 이부분은 그냥 믿으면 된다. 이번에는 문자열을 뒤집어서 출력하는 경우를 살.......

[자료구조] String Matching [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. String Matching string에서 내가 원하는 문자열을 찾는 방법을 말한다. 예를 들어 abababcabcabcdabccbaabdabcabcdabcd 라는 Text가 있다고 해보자. 우리는 이중에서 abcabcd 라는 pattern을 찾아야 한다. 수업시간에는 총 3가지 알고리즘을 알려주셨다. 1) Naive 2) DFA (Deterministic Finite Automaton) 3) KMP (Knuth, Morris, Pratt) 이중 가장 빠른 알고리즘은 KMP 알고리즘 이며, 만약 ∑가 작은경우라면 DFA알고리즘이 더 좋을 수 있다. (참고로 ∑는 알파벳의 집합을 의미한다, 예를 들어 ∑ &#.......

[CPS] 23번 - 연속 부분 증가수열 <17> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 일단 입력값이 10만 까지 가능해서 2중 for문 을 최대한 피하는 방식으로 구현하려 노력하였다. 내 코드 난 vector를 통해 일단 값을 싹 한번 읽어들인 후, 최대길이를 찾는 방식으로 구현했는데 강사분의 방식을 보니 애당초 처음부터 pre와 now 변수를 이용해 연이은 변수들을 비교해나가면 vector를 만들 필요가 없음을 느겼다. 강좌 코드 애당초 pre와 now변수 2개를 사용해서 연속적으로 전진하면서 pre보다 now가 크거나 같은경우에 한하여 cnt를 증가시킨다.......

[CPS] 14번 - 뒤집은 소수 <14> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 내가 생각한 소수 판별방식과 강사분의 방식이 달랐다. 나는 string으로 변환후 역순으로 바꿔 다시 atoi함수를 이용하여 바꿀생각을 했는데, 강사님은 수학적으로 접근하셨다. 내 코드 내 코드는 처음에 오류가 났었다. isPrime함수가 인자로 1을 받을경우에는 false가 반환되야 한다. 1은 소수가 아니니까 말이다 하지만 위의 처음 나의 코드에서는 1을 따로 검사하지 않았고, x에 1이 넘어오면 for문이 실행되지 않고, 자동으로 true를 반환해 버린다. 이로인하.......

[CPS] 16번 - Anagram (구글 인터뷰 문제) <15> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 카운터 배열을 만들어 두 배열을 비교하는 방식이 먼저 떠올랐다. 강사님도 나와 같은 논리로 문제를 해결하셨다. 다만 문자를 구분할떄 ASCII 테이블 을 이용하는점이 아직 적응이 잘 안된다. 내 코드 대문자 알파벳의 아스키 범위는 65 부터 90 까지 이다. 소문자 알파벳의 아스키 범위는 97 부터 122 까지 이다. 이들을 하나의 배열에서 카운트 하려면 배열의 index 1부터 26 까지는 대문자를, 27부터 소문자의 수를 카운트 하면 된다, 위와 같은 배열을 만들어.......

[CPS] 20번 - 가위 바위 보 <16> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 우선 3가지 배울 점이 있었다. 1) cin과 getline을 혼합하여 사용할때 주의 할점 cin은 버퍼에 개행문자 '\n' 를 남긴다. 따라서 이를 제거하지 않고 바로 getline을 호출하면 getline에서 이전 버퍼에 남아있는 개행문자를 읽고 그냥 끝나버린다. 따라서 cin을 사용한후 바로 getline을 사용하려면 cin.ignore() 을 통해 버퍼를 비워준후 getline을 호출해야 정상작동한다. 2) getline은 string에 저장할때 공백도 다 읽어서 저장한다는 점. 예를 들어 1.......

STL을 사용한 그래프의 구현 (Graph implementation using STL) [내부링크]

해당 본문의 원문의 출처는 Geeks for Geeks 입니다. STL을 활용한 Graph 구현방식의 공부에 도움이 될거라 생각합니다. 원문 주소 Graph implementation using STL for competitive programming | Set 1 (DFS of Unweighted and Undirected) 이번 글에서는 vector를 사용하여 유용하고 빠르게 그레프를 구현하는 방법에 대하여 알아봅시다. 구현은 인접 리스트를 활용하여 그레프를 표현하게 됩니다. 우선 다음 예시는 무방향이며 가중치가 없는 정점 5개의 그레프 입니다. 사진을 통해서 확인해 봅시다. 위의 그레프를 인접리스트로 표현하면 다음과 같습니다. 우리는 한가지 STL, 즉 vector를 사용해서 인접리스트 형식의 그레프를 구현할 것.......

[백준] 1753번 (최단경로) <12> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 이번 시간에는 최단 경로를 구하는 문제였다. 공부했던 알고리즘인 Dijkstra를 활용하면 가볍게 풀리는 문제였다. 내 코드 이번에는 한번에 맞출 수 있었다. 다만 내가 처음 구현한 코드에서는 방문한 노드도 확인하는 방식으로 구현하였다. 물론 그렇게 해도 문제는 맞았다. 하지만 문제를 푼 후 다른 분들의 풀이를 보니 방문노드 검사를 하지 않았다. 왜지? 란 의문과 함께 계속 고민중이다....(왜지?...) dist[] 의 거리가 한번 갱신되고 최소거리가 정해진 후 priority_queue에 들어갈탠데... 그다음에는 다시 갱신될 수가 없을테니, queue에 다시.......

[백준] 2751번 (수정렬하기2) <13> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 간단한 sorting 문제였다. 다만 입력값이 10만 까지 가능한점을 보고 일반적인 삽입정렬이나, 선택정렬, 버블 정렬같은거 쓰면 바로 틀리겠다를 인지하였다. 그래서 mergeSort를 사용하기로 마음먹고 구현하였다. 내 코드 원래 동적할당으로 풀었던 것도 있는데, 그냥 다시 배열의 크기를 처음부터 지정하는 방식으로 바꾸었다. 쉬운 문제임에도 불구하고 처음에 한번 틀렸다. 병합정렬 자체가 틀린것 이 아니라, 함수를 호출할 때 범위를 잘못 넘겨줬다. main 에 보면 mergeSort(arr, 0, len-1); 부분이 있는데 이를 이전에 틀린 방식에서는 다음과 같.......

[자료구조] 배열의 성능 분석 [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 배열의 성능 분석 우선 배열의 정의부터 살펴보고 시작하자. Array: 동일한 type이 연속된 주소에 저장된다. 같은 배열이라도 값이 한쪽에 모여있을 수 도 있고, 산발적으로 흩어져 있을 수 도 있다. 또 값들이 순서대로 정렬되어 있을 수도 있고 그렇지 않을 수도 있다. 이러한 특성들이 배열의 성능에 큰 영향을 미친다고 한다. 또한 값을 Array에 넣는 방식에 따라서 Search, Insert, Delete의 성능이 달라진다. Packed vs Unpacked 원소들이 저장될때 배열의 한쪽으로 몰아서 저장할 것인가? 아니.......

[CPS] 9번 - 모두의 약수 <8> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 시간초 제한이 1초인 문제였다. 하지만 내 풀이방식으로는 시간초 안에 해결할 수 없었다. 그도 그런것이 for문이 2중으로 돌아서 시간복잡도가 O(n^2)인 코드였다. 강사분께서는 O(nlogn)에 가까운 방식을 알려주셨다. 내 코드 위와 같이 구성하였는데, 30000만 이상부터는 시간 초과가 떳다. 강사분깨서 초보자 대부분이 나의 코드처럼 짜신다고 하셨을때 뜨금했다... 시간복잡도도 항상 염두하자!! 강좌 코드 강사님의 방식은 1부터 입력으로 받은 n 까지 를 for.......

[백준] 1197번 (최소 스패닝 트리) <9> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 이번시간에도 지난번과 같은 freopen...을... 포함해서 제출한.... 이거 왜 의식이 안되지..... 내 코드 Kruskal과 Prim 중에 Kruskal의 방식으로 문제를 풀었다. 구현이 조금은 서툴러서 시간을 많이 들여 짠 코드다. 물론 이전에도 책으로 공부하면서 2번 정도 크루스칼 알고리즘을 구현해본적이 있지만, 그때와는 조금 다른 방식으로 구현해 나가다 보니 막히는 부분이 많았다. 동빈나 님의 알고리즘 영상과 다른 블로그들의 글도 많이 참고 하였다. version 2 다른 블로그에서들은 보통 대부분이 pair를 사용하셨드라. 나와 다른점이 있길래 다시 구.......

[CPS] 12번 - 숫자의 총 개수 <10> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 원래 생각했던 풀이 방식은 10으로 나누면서 count를 증가시키는 방식이였는데, 제한시간이 1초라는 점에서 시간초과될것이 눈에 보였다. 다른 방식을 떠올려야 했다. 내 코드 한 20분 정도 꾸준히 보니 자릿수마다의 규칙이 있었다. 1 ~ 9 까지 => 1 x 9 x 1자리 10 ~ 99 까지 => 10 x 9 x 2자리 100 ~ 999 => 100 x 9 x 3자리. 이를 고려하여 만약 1234가 input이면 다음과 같이 진행되도록 구현하였다. 우선 1234의 길이를 구한다. 4자.......

[백준] 1922번 (네트워크 연결) <11> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 하 거의 2시부터 6시 지금까지 한 4시간은 이 코드만 짠것같다... 논리상으로 맞는것 같은데, 어딘가에서 하나씩 오류가 있었다. 찾아내고 디버깅 하고 반복하다보니 시간이 오래 걸렸다. 그래도 풀고나니 즐거웠다!!. 추가적으로 같이 공부한 싸이트로는 Geekes for Geekes 에서 공부하였다. 진짜 알고리즘, 자료구조 공부하기 너무 좋은 싸이트 이다. 위의 싸이트 본문에서 STL을 활용한 방식에서 조금 다르게 나는 구현하였다. 내 코드 우선 사용한 알고리즘은 Prim 알고리즘을 이용하였다. 사실 우선순위 큐를 사용는 BFS 같은 방식이라고 풀면서 느.......

[자료구조] Selection Sort 증명 [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 선택정렬에 대하여 증명하였다. 알고리즘에 관한 증명들을 먼저 알려주시고 있는데, 이후에 연결리스트나, 스택 등을 설명해주신다 하셨다. Sorting의 증명 선택정렬을 증명하기에 앞서서, 우선 정렬 자체를 어떻게 증명할것인가? 에 대하여 답해보고 시작해보자. 입력으로는 a[0], a[1], ..., a[n-1] 의 집합이 들어온다. Sorting이 완료된 후 다음이 만족되어야 한다. sorting이 끝난후 배열에 저장된 값을 b[0], b[1], ..., b[n-1] 이라고 하자. - 조건 1: { a[0], a[1], ..., a[n-1] } = {.......

[자료구조] Merge Sort 증명 [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 원래 Merget Sort를 증명하려면 Merge의 정확성 부터 증명한 후, 다시 Merge sort를 증명해야하는데, 수업시간에는 Merge의 정확성은 타당하다고 깔고 증명해 주셨다. Merge의 정확성 까지 보일필요는 없을거라 하셨다. Recursive Merge Sort 의 증명 전체 코드를 보일까 하다가 구현이 목적인 글은 아니고 또 어짜피 구글 찾아보면 널린게 코드이니 이는 패스 하겠다. 우선 그림을 통해 전체적인 느낌을 먼저 느껴보자. 위의 사진에서 하늘색 박스에서 초록색 박스로 바뀌는 지점이 재귀가 작동하는 부분.......

[CPS] 8번 - 올바른 괄호 <7> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 괄호가 정상적인지 체크하는 문제로써 사실 이전에 풀어본 기억이 있어 바로 stack을 사용하면 되겠다 생각해서 stack을 이용하여 풀었다. 하지만 강사분께서는 애당초 stack을 사용하지 않고 푸는 방법을 알려주셨다. 내 코드 위와 같이 생각 하고 풀었는데 점수가 60점 만 나왔다. 어딘가 틀렸다는 말이다. 시간초과 하나랑, 코드에서 오류도 있다는 말인것 같다. 오류 부분은 stack의 size 측정에서 0 밑으로 내려갈수가 없는데, 이를 생각 못하고 짜서 그런것 같.......

[자료구조] 수학적 귀납법 증명 [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 다들 아는 일반적인 수학적 귀납법 설명하려고 이글 쓰는것이 아닙니다. 사실 귀납법 자체는 고등학교만 정상적으로 나왔으면 다 아는내용이다. 문제는 다음 2가지 측면에서 교수님의 가르침에 큰 놀라움을 얻었기에 이를 공유하고자 글을 써본 것 이다. 1) P(n-1)을 왜 참이라고 가정하는가? 참인지는 어찌알지?? 2) 귀납법을 통해 재귀함수를 어떻게 인식해야 하는가? 수학적 귀납법 수학적 귀납법의 기본형 (1) Base: P(1)이 참이고 (2) Step: P(n-1) -> p(n) 이 참이라면 (3) Result: P(n)은 모.......

[자료구조] Binary Search 증명 [내부링크]

해당 본문은 학교수업시간에 배운 강의내용을 기반으로 정리하는 요약글 입니다. 정확하지 않은 점이 있으면 지적해주시면 감사하겠습니다. 이번 글은 다들 아는 이진탐색에 대한 증명을 배웠다. 사실 이진 탐색 알고리즘 자체는 직관적이고, 이해하기가 쉽다. 문제는 이 당연한 것을 증명하려고 따지다 보니까 머리가 터지는 기분(살아있음에 감사함을)이 들었다. 이런거 증명해서 어디다 쓰지? 라고 생각할수도 있지만, 이런건 학생 신분일때 한번은 해봐야 향후 나의 발전에 큰 도움이 될거라 믿어의심치 않는다. Binary Search 의 증명 우선 이진탐색의 코드를 확인해 보자. 아 그리고 이진탐색은 항상 sorting되어있어야만 한다. 이를 Invar.......

[CPS] 6번 - 숫자만 추출 (아마존 인터뷰) <6> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 풀이의 논리가 강사분과 일치하였다. 다만 나는 좀 만들어져있는 함수들 예를 들어 strlen이라던가, isdigit 같은 함수를 사용하였는데, 강사분은 문자열에서 숫자의 ASCII 코드의 범위가 48~57 임을 이용하셨다. 어떻게 보면 함수도 stack을 통해 비용이 들어가니, 시간제한을 염두한다면 그냥 연산이 빠를수도 있겠다 생각했다. 내 코드 cout 과 cin 대신 scanf와 printf를 사용하였다. 두 종류중 어느쪽을 사용해가야 할지 잘 모르겠다... 알고리즘 대회에서 str.......

3월도 벌써... [내부링크]

아직 3월 말은 아니지만, 그냥 오늘 하루정리겸... 내 근황 얼마전에 진짜 친한 친구랑 인천으로 여행갔다와서 좋았다. 간만에 바람도 스치고, 고기도 먹고, 정말 재미있었다. 기회가 된다면 또 같이 놀러가고 싶다!! 여행갔다온 것 말고는 하루하루 똑같다. 똑같음에 감사함을 느낀다. 사실 하루하루 특별한일 없이 무난하게 내 공부하면서 지나가는것이 가장 좋다. 물론 재미나게 놀고 여유를 즐기는 것도 좋지만, 이러한 여가생활의 진가를 느끼려면 평상시에는 열심이 내 공부를 해야 그 대비로 인하여 여가의 즐거움이 배가 된다고 생각한다. 이러점에서 요즘 잘 살아가고 있다는 스스로 생각이 든다. 공부 근황 1) 자료구조 입문서 복습 C+.......

[CPS] 1번 - 1부터 N까지의 배수의 합 <3> [내부링크]

인프런 - "it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비" 강의를 바탕으로 공부한 내용입니다. 문제는 공개할수 없으며, 코드만 공개 가능합니다. 원래 혼자서 문제를 좀 풀어볼 생각이였는데, 그래도 누군가의 설명과 함께 PS준비의 시작을 하면 좀더 효율적이라 생각해서 강좌를 구매하였다. 어떤 블로그에 추천 문제순서가 있어서 원래는 백준에서 해당 문제들을 풀어볼 예정이였지만, 그냥 이 강좌를 통해 입문을 해볼 생각이다. 이 강좌에 해당하는 문제와 더불어 추가적으로 백준도 풀어갈 예정이다. 총 100문제 정도인데 초반의 일부 문제는 너무 쉬워서 전부 올리지는 않을 예정이다. 내 코드 예를 들어.......

[백준] 11279번 (최대 힙) <4> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 그냥 STL의 priority_queue 사용해 볼려고 풀어본 아주 간단한 문제이다. 코드는 다음과 같다. 해설 이건 해설은 필요 없는것 같고, STL에 대하여 정리해 보았다. STL의 우선순위 큐를 사용하려면 <queue>헤더파일을 포함해줘야 한다. 이를 이용하여 최대 힙을 이용하는 큐 객체를 만들 수 있다. 기본적으로 "<=" 를 사용하는데, 가장 값이 큰 항목부터 출력되는 max Heap 으로 동작한다. 만약 최소 힙을 사용하려면 ">=" 을 사용해야 하고, <funtional>을 추가적으로 포함시켜줘야 한다. 우선순위 큐.......

[백준] 1260번 (DFS와 BFS) <5> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다. 이번에는 좀 어이없는 부분에서 틀렸다... 보통 따로 코드를 짜볼때는 input값을 text에서 자동으로 loading하기 위해서 다음과 같이 사용한다. 위와 같이 해주면 같은 폴더안의 input.txt 파일에 적혀있는 값을 stdin 으로 읽어온다. 문제는 이부분을 생각못하고 백준 코드 제출 부분에 그대로 올렸다. 총 3번 틀렸는데 3번의 제출 모두 코드가 거의 똑같다. 아무리 봐도 내 BFS와 DFS함수에는 오류가 없었다. 심지어 내가 컴파일 할때는 정상작동 했다. 뭐가 문제인지 계속 코드를 읽어도 틀린 부분이 없었다. 아니 진짜 아무리봐도 틀린부분이 없는데.......

[백준] 2750번 (수 정렬하기) <1> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다.여러가지 정렬 기법이 있겠지만 간단한 selection sort를 사용해서 풀어보았습니다.책으로 공부중인 sorting을 직접 풀어보고싶다는 생각에 한문제 풀어보았다. 너무 쉬운문제라 금방 맞춘것 같다.책에서 배운 정렬당 한문제 정도씩 풀어볼 예정이다.

C++로 쉽게 풀어쓴 자료구조 (14장, 탐색) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.1) 14장 탐색탐색은 하나 이상의 field로 구성된 record의 집합에서 원하는 레코드를 찾아내는 작업이다. 보통 이런 레코드의 집합을 table이라고 부른다. 레코드들은 각각 고유한 키값을 갖는데, 이를 탐색키(search key) 라고 부른다. 자료 검색은 테이블에서 해당 탐색키를 찾는 것 이다.Keyed Record ADT데이터: 키와 값을 가진 요소 (key, value)의 집합연산:- create(key, value): 주어진 key와 value를 각각 키와 값으로 갖는 레코드를 생성.- getKey(): 레코드의 키를 반환한다.- getValue(): 레코드의 값을 반환한다.- update(value).......

C++로 쉽게 풀어쓴 자료구조 [리뷰] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 단점대로 언급할 것 입니다.<읽은기간> 2021/02/18 ~ 2021/03/15<리뷰 순서>1) 책의 표지2) 단원별 요약3) 단원별 리뷰4) 읽은소감우선 저의 글의 앞부분만 보는 분들을 위해 먼저 간단히 3가지에 대해 답해보겠습니다.Q 이 책을 읽기 전에 필요한 수준/ 지식은?=> 이책은 C++을 이미 충분히 숙지한 사람을 대상으로한 자료구조 기본서 이다. 기본 문법사항들은 알고있어야 한다.Q 이 책을 읽어야 할 필요성, 어디에 도움이 될까?=> 자료구조의 필요성을 모르는 분들도 은근 블로그 글들 보면 있는데.......

[백준] 2957번 (이진 탐색 트리) <2> [내부링크]

직접 풀어보고 올리는 코드입니다. 지적이나 더 좋은 방향에 대한 댓글은 항상 환영합니다.이진 탐색 트리 단원을 복습하면서 한문제 정도 풀어보았다.문제풀이 2번째라 사실 어느STL을 사용해야하는지도 잘 몰라서 그냥 이진 트리를 직접 구현해서 풀어봤는데... 시간초과가 떴다....우선 내가 쓴 코드는 다음과 같다. 일단 이걸 직접 구현해서 푸는것 자체가 잘못하는 것 같다는 생각이 계속 들면서 풀었다. vscode에서는 결과값이 정상적으로는 나오는데 시간이 초과되니 뭔가 잘못 됬다고 느꼈으며, 직접 구현하는것이 아니라 다른 방법을 문제풀이에서는 사용할 것 이라 생각하였다.여러 블로그들의 글을 보니 map을 다들 사용하셨다. 나.......

C++로 쉽게 풀어쓴 자료구조 (13장, 정렬) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.1) 13장 정렬 정렬이란 물건을 크기순으로 오름차순이나, 내림차순으로 나열하는 것 을 의미한다. 일반적으로 정렬시켜야할 대상을 레코드(record)라고 불린다. 레코드는 다시 field라고 하는 보다 작은 단위로 나누어 진다. 여러 필드중 레코드들을 구분해주는 역할을 key가 한다.선택 정렬 (selection sort)정렬되지 않은 숫자가 모여 있는 리스트 B 와 정렬이 완료된 숫자들이 들어가는 리스트 A 가 있다고 하자.A{ } : B{5, 3, 8, 1, 2, 7}선택 정렬은 B의 리스트에서 가장 작은 숫자를 선택하여 A리스트로 이동하는 작업을 반복한다. B.......

C++로 쉽게 풀어쓴 자료구조 (11장, 그래프) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.1) 11장. 그래프(Graph)Graph의 ADT데이터: 정점의 집합과 간선의 집합연산:- creat(): 그래프를 생성한다.- isEmpty(): 그래프가 비어있는지 확인한다.- insertVertex(v): 그래프에 정점 v를 삽입한다.- insertEdge(u, v): 그래프에 간선 (u, v)를 삽입한다.- deleteVertex(v): 그래프의 정점 v를 삭제한다.- deleteDdge(u, v): 그래프의 간선(u, v)를 삭제한다.- adjacent(v): 정점 v에 인접한 모든 정점의 집합을 반환.인접행렬을 이용한 그래프 클래스의 구현인접행렬은 정점이 n개 이면 n x n의 matrix에 정보를 표현하는 방식이다. 간.......

C++로 쉽게 풀어쓴 자료구조 (12장, 가중치 그래프) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.이번 12장 책 코드에 중간중간 오류코드들이 보인다... 이해를 조금 방해하는 수준이다.1) 12장. 가중치 그래프(Weighted Graph) 가중치 그래프는 이전에 만들었던 AdjMatGraph class를 상속하여 사용한다. 이전에 사용했던 인접행렬에서는 간선이 있으면 1 없으면 0을 행렬에 저장했지만, 이번에는 가중치값을 행렬에 저장하였다. 일정 범위를 두고 그 범위 안의 값이면 간선이 있고, 이를 벗어나는경우는 간선이 없다고 여김WGraph.h책의 코드가 부분부분 틀린부분이 있는데 논리적으로 흐름을 따르면 수정가능한 부분들이다.최소 비.......

C++로 쉽게 풀어쓴 자료구조 (10장, 힙) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.1) 10장. 힙(Heap)힙은 부모 노드의 키 값이 자식 노드의 키 값보다 큰(or작은) 이진트리 를 말한다. A가 B의 부모 노드라고 가정하면,key(A) >= key(B) 인경우가 최대 힙이 되며, key(A) <= key(B) 인경우가 최소 힙이 된다.Heap의 ADT데이터: 우선순위를 가진 요소들의 모음연산:- insert(item): 우선순위 큐에 항목 item을 추가한다.- remove(): 우선순위 큐로부터 가장 우선순위가 높은 요소를 삭제하고 이 요소를 반환한다.- find(): 우선순위가 가장 높은 요소를 삭제하지 않고 반환만 한다.- isEmpty(): 우선순위 큐.......

C++로 쉽게 풀어쓴 자료구조 프로그래밍 프로젝트 9-1 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.프로그래밍 프로젝트1) 9.2절에서 이진 탐색 트리의 탐색 연산을 트리 클래스에서 구현했고 노드 클래스에서도 구현해 보았다. 트리의 각 노드들을 모두 자신을 루트로 하는 서브트리를 대표한다고 보면 많은 트리의 연산들을 노드에서 구현할 수 있다. 8장의 프로그램 8.1과 프로그램 8.2를 수정하여 BinaryTree 클래스에서 구현했던 다음 멤버함수들을 BinaryNode 클래스에서 구현해라.void BinaryNode::inorder();void BinaryNode::preorder();void BinaryNode::postorder();int BinaryNode::getCount();int BinaryNode::getHeight();int B.......

C++로 쉽게 풀어쓴 자료구조 (9장, 이진 탐색 트리) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.1) 9장. 이진 탐색 트리이진 탐색 트리는 이진트리 기반의 탐색을 위한 자료구조로 효율적인 탐색 작업을 위한 구조이다.1) 모든 노드는 유일한 키를 갖는다.2) 왼쪽 서브트리의 키들은 루트의 키보다 작다.3) 오른쪽 서브트리의 키들은 루트의 티보다 크다.4) 왼쪽과 오른쪽 서브트리도 이진 탐색 트리이다.Binary Search Tree ADT데이터: Binary Search Tree의 특성을 만족하는 이진트리: 어떤 node x의 왼쪽 서브트리의 key들은 x의 key보다 작고, 오른쪽의 서브트리의 key들은 x의 key보다 크다. 이때 왼쪽과 오른쪽 서브트리도 모두 이진 탐.......

C++로 쉽게 풀어쓴 자료구조 (7장, 순환) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.1) 7장. 순환이번장은 재귀, 순환에 대하여 배웠다. 사실 재귀는 친숙하면서도 새로운 개념이다. 이전에도 재귀를 사용해 미로 찾기, 하노이탑 등등 몇가지 문제들을 접한적이 있는데, 이번시간에도 다시 점검한다는생각으로 배웠다. 간단하게 미로찾기 코드정도만 올려야 겠다.교제와 다른 방식으로 구현한 미로찾기결과는 다음과 같다.올바른 경로를 따라서 길을 찾아갔다.2) 나의 현황 간단히 재귀에 대한 내용을 복습하였다. 추가로 파이썬으로 Flask를 사용하여 웹페이지를 만들어보고있다. 구현이 완료되면 올려볼 예정이다.

C++로 쉽게 풀어쓴 자료구조 (8장, 트리) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.1) 8장. 트리 대부분의 교제에서 가르치는 트리중 대표가 아마 이진트리 일 것 이다. 이진트리의 정의를 간략히 살펴보자!1) 공집합이거나2) 루트와 왼쪽 서브트리, 오른쪽 서브트리로 구성된 노드들의 유한 집합으로 정의된다. 이진트리의 서브트리들은모두 이진트리여야 한다.Binary Tree 의 ADT데이터: 노드와 간선의 집합. 노드는 공집합이거나 공집합이 아니라면 루트노드와 양쪽 서브트리로 구성된다. 모든 서브트리는 이진트리여야 한다.연산:- create(): 이진트리를 생성한다.- isEmpty(): 이진트리가 공백 상태인지 확인한다.- getRo.......

2월이 끝나간다 [내부링크]

자주는 아니더라도 대략적인 방향을 정해가면서 공부해볼 생각이다. (어짜피 인생은 뜻되로 안되는걸 매우 잘 알지만....)최근 구매한 책최근 책을 3권 주문하였는데, 모두 C++에 관한 책이다. 현재 "C++로 쉽게 풀어쓴 자료구조" 책은 절반정도 읽었으며, 원래는 이와 병행하여 modern C++에 관한 내용을 담은 "A tour of C++" 이라는 책을 읽으려고 구매하였다. "A tour of C++" 같은경우 C++의 창시자인 비야네 스트롭스트룹 께서 작성하신 책으로 표준에 가까운 내용과 C++17 에서의 표준된 내용 더 나아가 C++20 그 이상에서 C++이 목표로 하는 바를 담은 책이다. 현대적인 C++에 대해 깊게까지는 아니.......

C++로 쉽게 풀어쓴 자료구조 프로그래밍 프로젝트 8 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다. 프로그래밍 프로젝트(1) 이진트리가 완전 이진트리인지를 검사하는 연산(2) 임의의 node의 레벨을 구하는 연산을 구현한다, 만약 node가 트리 안에 있지 않으면 0을 반환한다.(3) 이진트리의 모든 노드에서 왼쪽 서브트리와 오른쪽 서브트리의 높이의 차이가 2보다 작으면 이 트리를 균형잡혀있다라고 한다. 현재 이진트리가 균형 잡혀 있는지를 검사하는 다음 연산을 구현한다.(4) 이진트리에서 경로의 길이를 루트에서부터 모든 자식 노드까지의 경로의 길이의 합이라고 하자. 경로의 길이를 구하는 연산을 구현한다(5) 이진트리를 좌.......

혼공파(혼자 공부하는 파이썬) 리뷰 [내부링크]

2020/7/14 부분 2회독 리뷰 추가 <읽은기간> 2020/3/1 ~ 2020/3/7 (7일내내 이책만 아침부터 저녁까...

Do it! C언어 입문 리뷰 [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 ...

파이썬으로 웹 크롤러 만들기 리뷰 [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 ...

CODE (Program Programming Programmer) [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 ...

C 기초 플러스 6판 리뷰 [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 ...

리눅스 시스템 프로그래밍 2판 리뷰 [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 ...

윤성우의 열혈 자료구조 리뷰 [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 ...

ZERO to ONE (제로 투 원) 리뷰 [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 ...

명품 C++ 리뷰 [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 ...

객체지향의 사실과 오해 [후기] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 ...

뇌를 자극하는 C++ STL [후기] [내부링크]

저의 돈으로 직접사서 직접 완독해본후 써보는 후기입니다. 따라서 장점은 장점대로 칭찬할것이며, 단점은 ...

C++로 쉽게 풀어쓴 자료구조 (5장, Linked List) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.1) 5장. 연결리스트 연결리스트의 개념 자체는 어렵지는 않다. Node마다 데이터를 저장하는 곳과, 다음 node를 가리킬 포인터변수가 있으며, 이를 필요할때마다 추가하면서 기차처럼 이어가는 형태이다. 열혈 자료구조에서도 C로 여러번 구현한 내용이다. Node class안에 Student 객체를 포함시키는 일반적인 방법이 난 가장먼저 떠올랐다. 다음처럼 말이다.열혈 자료구조를 공부할때 이런 형태로 많이 구현해봤기 때문이다. 하지만 C++의 장점을 활용하는 코드가 나의 머리를 강타하였으니..그방법은 바로 상속!!을 이용하는 방법이다. Nod.......

C++로 쉽게 풀어쓴 자료구조 프로그래밍 프로젝트 5 [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.DFS를 활용한 미로찾기헤더파일에서는 using namespace std를 사용하지 않았습니다. 메인에서만 사용하였습니다. 헤더에서 이를 선언해버리면 이를 include하는 다른 소스파일에서까지 using namespace std가 적용되기때문에 헤더파일에서는 std::를 다 적어줬습니다.Location2D.hMaze.hmain.cpp결과는 다음과 같다.

C++로 쉽게 풀어쓴 자료구조 (6장, List) [내부링크]

내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.1) 6장. 리스트 앞에서 배운 스택, 큐, 덱과 같이 리스트 또한 선형 자료구조 이다. 선형이란 원소들이 일렬로 순서대로 들어있는것을 말한다. list와 이들 자료구조의 차이는 무엇일까? 답은 원소에 대한 접근 방법이 다르다는 것 이다. 스택이나, 큐, 덱같은 경우 자료의 접근은 front나 rear을 통해서만 접근이 가능하다. 중간에 원소를 삽입하는것을 허용하지 않는다. list는 이러한 제한이 없다. 임의접근이 가능한것이다.List의 ADT데이터: 임의 접근 방법을 제공하는 타입이 같은 요소들의 순서있는 모임.연산:- insert(pos, item): .......