본문 바로가기

분류 전체보기1101

[자바] 백준 1422 - 숫자의 신 (java) 문제 : boj1422 필요 알고리즘 개념 정렬, 그리디 그리디로 접근해서 풀 수 있다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 K==N 이라고 생각해보자. 즉, 모든 숫자를 1번씩 배치해서 가장 큰 수를 만들어야 한다. 어떤 수를 먼저 배치하는게 이득일까? 어차피 만들어진 수의 자리수는 K개의 숫자들의 자리수의 합과 동일하다. 따라서 단순히 큰 수가 먼저오는건 의미가 없다. 예를들어 1과 100 중에 크다고 1.. 2023. 1. 24.
[자바] 백준 3101 - 토끼의 이동 (java) 문제 : boj3101 필요 알고리즘 개념 수학, 구현 수학태그가 달려있긴한데, 약간의 규칙찾기 + 구현 문제인 것 같다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 대각선으로 지그재그로 작성된걸 잘 살펴봐보자. 1 -> 2 -> 4 -> 7 -> 11 -> 16 까지 등차수열처럼 증가한다.(증가비가 1, 2, 3,...) 그리고 36 -> 34 -> 31 -> 27 -> 22 에서 등차수열처럼 감소한다.(감소비가 2, .. 2023. 1. 23.
[클린코드] 13장. 동시성 스터디 메인 페이지 - ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것으로, 책에서 말하고자 하는 바와 다를 수 있습니다. - 모든 이미지의 출처는 클린 코드(로버트 C. 마틴 저) 책 입니다. 13장. 동시성 ⚈ 동시성과 깔끔한 코드는 양립하기 어렵다. 스레드를 하나만 실행하는 코드는 짜기가 쉽다. ⚈ 동시성이 필요한 이유 동시성은 결합(coupling)을 없애는 전략이다. 즉, 무엇(what)과 언제(when)를 분리하는 전략이다. 스레드가 하나인 프로그램은 무엇과 언제가 서로 밀접하다. ⚈ 동시성의 미신과 오해 동시성은 항상 성능을 높여준다. -> 동시성은 때로 성능을 높여준다. 대기 시간이 아주 길거나 여러 프로세서가 동시에 처리할 독립적인 .. 2023. 1. 21.
[클린코드] 12장. 창발성 스터디 메인 페이지 - ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것으로, 책에서 말하고자 하는 바와 다를 수 있습니다. - 모든 이미지의 출처는 클린 코드(로버트 C. 마틴 저) 책 입니다. 12장. 창발성 ⚈ ☆ 창발성 : 하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체구조)에서 자발적으로 돌연히 출현하는 현상 ⚈ 착실하게 따르기만 하면 우수한 설계가 나오는 간단한 규칙 네 가지! (중요도 순) 모든 테스트를 실행한다. 중복을 없앤다. 프로그래머 의도를 표현한다. 클래스와 메서드 수를 최소로 줄인다. ⚈ 모든 테스트를 실행하라 테스트를 철저히 거쳐 모든 테스트 케이스를 항상 통과하는 시스템은 '테스트가 가능한 시스템'이다. 테스.. 2023. 1. 21.
[클린코드] 11장. 시스템 스터디 메인 페이지 - ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것으로, 책에서 말하고자 하는 바와 다를 수 있습니다. - 모든 이미지의 출처는 클린 코드(로버트 C. 마틴 저) 책 입니다. 11장. 시스템 ⚈ 소프트웨어 시스템은 애플리케이션 객체를 제작하고 의존성을 서로 '연결'하는 준비 과정과 준비 과정 이후에 이어지는 런타임 로직을 분리해야 한다. ⚈ 시스템 생성과 시스템 사용을 분리하는 한 가지 방법으로, 생성과 관련한 코드는 모두 main이나 main이 호출하는 모듈로 옮기고, 나머지 시스템은 모든 객체가 생성되었고 모든 의존성이 연결되었다고 가정한다. 애플리케이션은 그저 객체를 사용할 뿐이다. ⚈ 팩토리 - 때로는 객체가 생성되는 시점.. 2023. 1. 21.
[오브젝트] 책 내용 전체 정리 스터디 메인 페이지 (챕터별 정리 내용 따로 보기 가능)목차- ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것으로, 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다.- 모든 이미지의 출처는 오브젝트(조영호 저) 책 입니다. 들어가며 - 프로그래밍 패러다임01 패러다임의 시대- 현대인들에게 패러다임 → 한 시대의 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계 (e.g. 천동설 → 지동설 로의 패러다임의 전환)- 이 책에서 얘기하는 패러다임 전환 - 절차형 패러다임에서 절차형 패러다임으로의 변화 02 프로그래밍 패러다임- ☆P.S 좋아하는 알고리즘 중 하나인 플로이드 와샬 알고리즘의 그 플로이드 와샬이 프로.. 2023. 1. 21.
[오브젝트] 15장. 디자인 패턴과 프레임워크 스터디 메인 페이지목차- ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것으로, 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다.- 모든 이미지의 출처는 오브젝트(조영호 저) 책 입니다. CHAPTER 15. 디자인 패턴과 프레임워크⚈ 디자인 패턴 - 협력을 일관성 있게 만들기 위해 재사용할 수 있는 설계의 묶음애플리케이션을 설계하다 보면 어떤 요구사항을 해결하기 위해 과거에 경험했던 유사한 해결 방법을 다시 사용하는 경우가 있다.이처럼 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결 방법을 디자인 패턴이라고 부른다.디자인 패턴의 목적은 설계를 재사용하는 것이다.디자인 패턴은 다양.. 2023. 1. 21.
[자바] 백준 1323 - 숫자 연결하기 (java) 문제 : boj1323 필요 알고리즘 개념 수학, 정수론 나머지 연산의 법칙을 활용하는 수학문제이다. 비둘기집의 원리 불가능한 경우를 알기 위해 비둘기집의 원리를 사용해야 한다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 N이 10억까지 가능한데, 이걸 3번만 붙여도 long 으로 표현 가능한 수치를 넘어간다. BigInteger를 사용해 뭔가를 구하게되면 결국 문자열로 처리하는 것이므로 연산 속도가 엄청나게 느려진다. .. 2023. 1. 21.
[오브젝트] 14장. 일관성 있는 협력 스터디 메인 페이지목차- ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것으로, 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다.- 모든 이미지의 출처는 오브젝트(조영호 저) 책 입니다. CHAPTER 14. 일관성 있는 협력⚈ 애플리케이션을 개발하다 보면 유사한 요구사항을 반복적으로 추가하거나 수정하게 되는 경우가 있다.이러한 상황에서 각 협력이 서로 다른 패턴을 따를 경우에는 전체적인 설계의 일관성이 서서히 무너지게 된다.객체지향 패러다임의 장점은 설계를 재사용할 수 있다는 것이다. -> 재사용은 공짜로 얻어지지 않는다. 재사용을 위해서는 객체들의 협력 방식을 일관성 있게 만들어야 한다.과거의 해결 방법을 반복적.. 2023. 1. 21.
[TDD] 스터디 4주차 (25~28장 정리) 스터디 메인 페이지 25장. 테스트 주도 개발 패턴 ⚈ 그 어떤 소프트웨어 엔지니어도 아무리 작은 변화라도 테스트하지 않고 릴리즈하지는 않는다. ⚈ 스트레스를 많이 받음 -> 테스트를 점점 뜸하게 함 -> 에러는 점점 많아짐 -> 에러로 인해 더 많은 스트레스! '테스트'를 '자동화된 테스트'로 치환하자. '내가 이걸 고치면서 뭔가 다른 부분을 망가트리지 않았을까?' 라는 두려움을 지루함으로 바꿔주는 효험이 있음 ⚈ 격리된 테스트 - 테스트들은 서로 영향이 없어야 한다. ⚈ 테스트 목록 - 시작하기 전에 작성해야 할 테스트 목록을 모두 적어둘 것. ⚈ 테스트 우선 - 테스트는 언제 작성하는 것이 좋을까? 테스트 대상이 되는 코드를 작성하기 직전! ⚈ 단언 우선 - assert는 언제쯤 쓸까? assert.. 2023. 1. 20.