본문 바로가기
300x250

분류 전체보기241

빅 오 Big O? 어떠한 문제를 해결하는데에 사용되는 자료 구조와 알고리즘의 효율성을 설명하기 위한 것으로 수학적 개념을 차용하여 빅 오 표기법 이라 부른다. 알고리즘의 효율성을 평가할 때에는 두 가지의 기준으로 나뉘는데, 한정된 메모리 공간을 분석하는 공간 분석과 알고리즘이 어느 정도 빠른지 알아보는 시간 분석이 있다. 시간과 공간 복잡성을 계산할 때 최상, 최악, 평균 복잡성을 고려하게 되지만, 보통은 최악의 시나리오를 의미한다. 이는 비관적인 접근이 유용한 도구일 수 있기 때문이다. 알고리즘이 얼마나 비효율적인지 알면 최악을 대비함과 동시에 알고리즘의 선택에 중요한 영향을 미칠 수 있다. 빅 오의 본질 데이터 원소가 N개 일 때 알고리즘에 몇 단계가 필요할까? 빅 오가 진정 의미하는 것은 데이터가 늘어날.. 2023. 10. 19.
1부- 6장. 데이터 보호(단계 4/4) 1. 긴 함수 조각내기 2. 타입 코드 처리 3. 유사 코드 통합 4. 데이터 보호 데이터 캡슐화 데이터와 기능에 대한 접근을 제한하는 캡슐화에 중점을 둔다. 데이터 캡슐화란 변수와 메서드를 클래스로 옮기는 과정을 말한다. 이는 접근할 수 있는 지점을 제한하고 구조를 명확하게 하며 응집력을 더 명확하게 하는데 도움을 준다. 1) getter 와 setter를 사용하지 말 것 부울(Boolean)이 아닌 필드에 setter나 getter를 사용하지 말자. 문제점 -> getter: 캡슐화를 해제하고 불변속성을 전역으로 만들어 객체를 얻은 어느 곳에서나 호출하여 수정할 수 있게 만든다. setter: 데이터를 반환하도록 getter를 수정하고 이 데이터를 받는 곳에서도 이러한 구조를 .. 2023. 10. 14.
프로그래머스: 월간 코드 챌린지 시즌3 - n^2 배열 자르기 https://school.programmers.co.kr/learn/courses/30/lessons/87390#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 시간초과로 혼자 풀기 실패 이 글을 보고 이해했다 -> https://hogumachu.tistory.com/21 이중for문을 만들어 이용할 필요 없이 딱 필요한 부분의 값만 구하여 리턴하는데 left와 right값과 n의 몫과 나머지를 이용하면 값을 만들어 낼 수 있다. // 시간 초과 코드 func solution(_ n:Int, _ left:Int64, _ right:Int64.. 2023. 10. 13.
프로그래머스: 완전탐색 - 카펫 https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 brown과 yellow의 합이 완성된 배열의 크기이며, yellow를 brown으로 감싸야 하므로 최소 높이는 3부터 시작 한다. func solution(_ brown:Int, _ yellow:Int) -> [Int] { let totalCellCount = brown + yellow var number = 3 while true { if (totalCellCount % number !=.. 2023. 10. 7.
프로그래머스: 월간 코드 챌린지 시즌1 - 이진 변환 반복하기 https://school.programmers.co.kr/learn/courses/30/lessons/70129 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 func solution(_ s:String) -> [Int] { var removeCount = 0 var radixCount = 0 var currentS = s while currentS != "1" { var zeroCount = 0 for x in currentS { if x == "0" { zeroCount += 1 removeCount += 1 } } let radix = Str.. 2023. 10. 6.
프로그래머스: 기사단원의 무기 https://school.programmers.co.kr/learn/courses/30/lessons/136798 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 처음 풀었던 방식 -> func solution(_ number:Int, _ limit:Int, _ power:Int) -> Int { var divisors = 0 for i in 1 ... number { var count = 0 for j in 1 ... i { if i % j == 0 { count += 1 } } if count > limit { count = power } div.. 2023. 10. 4.
1부- 5장. 유사한 코드 융합하기(단계 3/4) 1. 긴 함수 조각내기 2. 타입 코드 처리 3. 유사 코드 통합 4. 데이터 보호 5.4 클래스 간의 코드 통합 어떤 동작에 따라 클래스를 분리한다. 이것을 전략 패턴이라 하는데 예를 들어, 지도에서 출도착지를 설정하고 수단은 어떤것을 선택할건지에 따라 클래스를 나눈다. 대중교통 클래스, 자동차 클래스, 도보 클래스 처럼 동작별로 나누게 된다. 이러한 패턴을 이용하여 발생하는 클래스 간의 관계를 다이어그램으로 표현할 수 있는데 흔히 UML을 사용한다. 전략 패턴이 도입 되면서 상태 패턴이라는 개념도 알아야 하는데, 상태 패턴이란 객체의 상태에 따라 클래스를 분리하는 것을 의미 한다. 예를 들어, 컴퓨터 전원 인터페이스가 있다면 이 인터페이스를 구현 하는 on 클래스, off 클래.. 2023. 10. 4.
1부- 4장. 타입 코드 처리하기(단계 2/4) 1. 긴 함수 조각내기 2. 타입 코드 처리 3. 유사 코드 통합 4. 데이터 보호 4.1. 간단한 if문 리팩터링 if-else문의 사용을 지양하고 다형성 있는 코드를 작성 해야한다. (if-else를 사용하면 코드에서 결정이 내려지는 지점을 고정하게 된다. 그럴 경우 if-else가 있는 위치 이후에서는 다른 변형을 도입할 수 없기 때문에 코드의 유연성이 떨어진다.) 신호등의 동작을 코드로 만든다고 생각해보자. func run(input: String) -> Bool { if input == Light.Red { return false } else if input == Light.Yello { return false } else in input == Light.Green { r.. 2023. 9. 22.
ETag EntityTag의 줄임말로 말 그대로 entity에 대한 식별자로 캐시 유효성 검증에 사용됩니다. 데이터 요청의 트래픽을 줄이는 것에 도움을 줍니다. 종류 약한(weak) 검사: 'W/'로 시작되는 문자열로 리소스 내용이 유사한 경우 동일한 것으로 간주합니다. 강한(strong) 검사: 바이트 대 바이트로 엄격한 검사를 진행합니다. 생성 콘텐츠의 해시, 마지막으로 수정된 타임스탬프의 해시 혹은 개정번호를 이용하여 ETag를 만들어 냅니다. 검증 서버로 Get으로 검증 요청을 하며 요청 시 header에 'If-None-Match: etag값' 을 담아서 요청을 합니다. 서버에서는 클라이언트 내에 캐싱하고 있는 버전과 서버의 버전이 동일하면 '304 Not Modified'로 응답하며, 동일하지 않을 경.. 2023. 9. 19.
300x250