본문 바로가기
728x90

전체 글228

1부- 3장. 긴 코드 조각내기(단계 1/4) 1. 긴 함수 조각내기 2.타입 코드 처리 3. 유사 코드 통합 4. 데이터 보호 코드가 쉽게 지저분해지는 주 원인 메서드 여러가지 일을 한다 추상화의 수준이 맞지않다 주석과 적절한 메서드명이 부족하다 코드를 조각내는 5가지 규칙 1. 다섯 줄 제한 한가지 작업만 해야하는 리펙터링 정의를 생각해보면 메서드가 길다는 것 자체가 좋지 않은 코드이다. 그렇기 때문에 메서드는 {}를 제외하고 5줄 이하여야 한다. 한가지 작업만 하는 메소드를 만들게 되면, 훨씬 빠르고 이해하기 쉽다. 2. 메소드 분리 메소드 내에 역할들을 그룹으로 작게 분리하여, 빈 줄을 추가하거나 주석을 추가한다. 이런 작은 그룹들은 하나의 메서드로 추출할 수 있다. 3. 추상화 수준 맞추기 코드는 직접 조작하는 낮은 .. 2023. 8. 27.
1부- 2장. 리팩터링 깊게 들여다보기 리팩터링의 이점과 핵심을 정리한다. 가독성 의도가 잘 전달되어야 한다는 의미 예. if a != false { return false } else { return true } 위와 같이 첫 조건문에 false를 사용하는 것은 (부정문을 사용하는 것은) 읽기 어렵고, 단순하게 만들 수 있는 코드를 길게 풀어 씀으로써 또 읽기 어려운 코드이다. 이를. return a 위와 같이 리팩터링 하면, 같은 기능을 하며 가독성 좋은 코드로 만들 수 있다. 유지보수성 변경(수정 및 추가)되는 부분이 많으면 안된다. 한군데서 무언가 수정함으로 관련 없는 다른 곳에 문제가 발생하는 것은 코드가 취악한 것이고, 일반적으로 이 근원은 전역변수에 있다. 전역 변수는 어디서든 읽고 쓰기가 가능하여 값의 변경이 나타날 수 있다. .. 2023. 8. 19.
1부- 1장. 리팩터링 리팩터링하기 이 책은 리팩터링을 어떻게 해야하는지에 대한 수련법을 기록한다. 리팩터링이란? 코드 스멜을 줄이고 코드의 가독성과 유지보수성을 높이기 위한 방법 (기능은 변경하지 않고 코드를 변경하는 것) 리팩터링을 하는 이유? 향후 유지보수를 하기 위해 코드의 가독성을 높이고 수정의 범위를 줄이기 위함 리팩터링은 언제 하고 언제 하지 말아야 하나 리팩터링은 항상 해야한다. 다만 아래와 같은 상황에서는 하지 않는것이 좋다 1. 한번 실행하고 삭제될 코드 2. 폐기 전 3. 엄격한 성능 요구 사항이 있는 경우 2023. 8. 19.
프로그래머스: 2018 카카오 블라인드 채용 - [1차] 캐시 https://school.programmers.co.kr/learn/courses/30/lessons/17680 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 LRU 알고리즘을 이용해서 캐시 만큼 배열 요소 개수가 차면 0번 인덱스 값을 지워주고 최근 검색 중인 city가 배열에 있는지 확인 후 있으면 지워준 뒤 맨 뒤로 넣어주는 작업을 해주면 된다. (단, city가 치사하게 대문자일 때도 있고 소문자일때도 있으니 처음에 그냥 cities를 대문자건 소문자건 싹다 바꿔준디 작업해야함) func solution(_ cacheSize:Int, _ c.. 2023. 7. 21.
프로그래머스: 과일 장수 https://school.programmers.co.kr/learn/courses/30/lessons/135808 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 score = 사과 수 즉, 이 사과 들 중에 m개 씩 빼와서 상자를 만들어야 한다 그러면 score.count / m 만큼 상자를 만들 수 있는데 최대 이익을 내야 하므로 score를 오름차순 정렬한 배열에서 최대 이익을 만들 수 있는 score.count % m 인덱스 값부터 상자를 만들어 내면 된다. 이 상자들 각자 최저 사과 점수) x (한 상자에 담긴 사과 개수) 를 구해서 값들을.. 2023. 7. 20.
프로그래머스: 귤 고르기 https://school.programmers.co.kr/learn/courses/30/lessons/138476#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 텐저린의 종류별로 k만큼 종류를 분류 했을 때 작은 값을 리턴하면 된다.(문제의 예제 그대로) 내가 생각한 방법은 종류별 개수를 [종류:개수] 딕셔너리를 만들어서 내림차순 정렬 시켜준 뒤, 제일 처음의 value 부터 k에서 빼주고 result에 1씩 더해준다. k가 0 이거나 마이너스 값이 될 때 result를 리턴해주면 원하는 값을 만들 수 있다. func solution(_ k.. 2023. 7. 16.
프로그래머스: 멀리뛰기 https://school.programmers.co.kr/learn/courses/30/lessons/12914 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 DP 문제 임 Int를 계속 더해줄 경우 제한된 n 2000의 범위를 넘어가므로 1234567로 나눈 나머지의 값을 사용해야한다 func solution(_ n:Int) -> Int { var result = [0,1,2] if n == 1 || n == 2 { return result[n] } for i in 2 ..< n { result.append((result[i] + result[i.. 2023. 7. 12.
프로그래머스: Summer/Winter Coding(~2018) - 점프와 순간이동 https://school.programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 N 까지 가기 위해선 항상 2의 위치를 거치게 된다 그러므로, N을 2로 나눴을 때 몫이 1이 될때까지 발생하는 나머지들을 모두 더한 수가 result가 된다. N result 3 2 7 3 8 1 9 2 func solution(_ n:Int) -> Int { var result = 1 var targetNumber = n while targetNumber != 1 { let mok = t.. 2023. 7. 11.
프로그래머스: 대충 만든 자판 https://school.programmers.co.kr/learn/courses/30/lessons/160586#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 keymap에 target의 문자가 하나라도 없으면 무조건 -1을 리턴 해야하는 것이 제일 핵심인 문제 func solution(_ keymap:[String], _ targets:[String]) -> [Int] { let keymapp = keymap.map{$0.map{String($0)}} let targetss = targets.map{$0.map{String($0)}} v.. 2023. 7. 8.