분류 전체보기 181

면접질문) Int와는 달리 float,double 연산에서 정확한 값을 구할 수 없는 이유는?

컴퓨터에서 수치를 다룰 때, 정수형(int)과 부동소수점 형(float, double) 사이에는 중요한 차이가 존재합니다. 정수형은 이진수로 정확하게 표현될 수 있기 때문에, 컴퓨터 내에서 정수 연산은 오류 없이 정확한 결과를 제공합니다. 반면, float와 double은 부동소수점 수를 나타내며, 이는 실수를 근사적으로 표현하는 방식입니다. 부동소수점 수를 이용한 연산에서 정확한 값을 구하기 어려운 이유는 실수를 이진수로 변환할 때 일부 실수가 이진수로 정확히 표현될 수 없기 때문입니다. 특히 10진수에서 간단히 표현되는 실수들이 이진법에서는 무한 소수가 되어버리는 경우가 많으며, 0.1과 같은 값은 이진수에서 끝없이 반복되는 소수로 나타나게 됩니다. 이러한 값들은 메모리에 정확히 저장될 수 없고, 대..

CS 관련 2024.03.24

iOS) 이진탐색 정리 및 실제 구현

이진 탐색(Binary Search) 분할정복 방식을 사용하여, 매 단계에서 탐색 범위를 반으로 줄여나가며 특정 값을 찾아내는 알고리즘 정렬된 배열에만 적용 가능하기 때문에, 이진 탐색을 수행하기 전에 배열이 정렬되어 있어야 한다. 시간복잡도 : O(logN) 1. 초기화 : 탐색 시작 전, 검색 범위를 배열의 전체로 설정 - 최소 인덱스 low(임의의 변수이름)를 0으로, 최대 인덱스를 배열의 마지막 인덱스 high(임의의 변수이름)로 설정 2. 중앙 요소 확인 : 배열의 중앙 요소를 찾는다. - (최소 인덱스 + 마지막 인덱스) / 2가 중앙 요소의 인덱스일 것이다. 3. 조건 판단 - 중앙 요소가 찾고자 하는 값과 같다면, 탐색을 종료하고 그 위치를 반환 - 중앙 요소가 찾는 값보다 크다면, 찾는 ..

swift ) Leetcode - 746. Min Cost Climbing Stairs

면접에서 마주한 문제 ....ㅠㅠ 로직 생각하고 구현을 어떻게 시작할지 한참 고민 끝에.. 무지성으로 만들다가 생각나버린.. 아.. 이거 dp구나 싶은 순간 응 코테 종료할게요 알고리즘 열심히 하겠습니다... 눈만 마주쳐도 아.. 이거 dp구나 할 수 있도록.. - 처음 생각한 접근방식 인덱스 0 / 1에서 시작하는 경우를 각각 고려해서 바로 다음 칸 / 두 번째 뒤의 칸의 cost와 각각 비교하여 최소값이 나오는 방향으로 나아감 -> 여기서 발상이 조금 더 나갔어야 했는데.. 아쉬웠다. - DP 활용(Bottom Up DP) class Solution { func minCostClimbingStairs(_ cost: [Int]) -> Int { var dp = cost let n = dp.count f..

iOS ) weak self / unowned self 비교

순환참조 문제를 방지하기 위해 약한 참조를 사용해야 할 때가 있는데, 약한 참조에도 두 종류가 있다. weak self, unowned self인데 두 가지에 대해 정리를 해보려고 한다. weak self optional 타입으로 사용되며, self가 nil이 될 수 있음을 의미한다. 옵셔널 바인딩 / 체이닝 등을 사용해야 한다. weak self로 참조한 경우 해당 객체가 메모리에서 해제될 때 자동으로 nil로 설정된다. unowned self non-optional 타입이며, self가 항상 값이 있음을 의미한다. 클로저 구문이 끝날 때도 항상 selfㄱ 클로저 내부, 특히 escaping 구문과 같이 비동기 처리를 하는 부분에서 self를 그대로 사용해버리면 문제가 발생하게 될 때가 있다. 가령, ..

iOS 2023.10.04

iOS ) TextField간 이동시 키보드에 가려지지 않도록(?) 화면 올리기..

대체 제목 뭐라고 지어요.. 화면에 여러 개의 텍스트필드가 있는 경우 & textFieldShouldReturn 메서드 사용하여 다른 텍스트필드로 이동하는 경우, 위치에 따라 키보드 때문에 가려지는 경우가 있음.. 키보드 위로 해당 텍스트필드가 오도록 화면을 올려버리자 하고 만들어보았다.. override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white firstInputField.delegate = self secondInputField.delegate = self buildViewHierarchy() setupConstraints() setupUI() setupTap() //Set Observer to scroll when..

iOS 2023.06.20

iOS ) UITextField - 커스텀 클리어 버튼 만들기..

텍스트 필드 영역 색상을 임의로 밝게 변경하다보니 텍스트필드의 클리어 버튼이... 다크모드에서 안보여... 그래서 어쩌다보니 만들게 된 커스텀 클리어 버튼.. import UIKit import SnapKit class CustomClearButton: UIButton { override init(frame: CGRect) { super.init(frame: frame) setupView() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func setupView() { self.setImage(UIImage(systemName: "xmark.circle.fill"), for: ..

iOS 2023.06.20

iOS ) TextField - placeholder 글자 색 변경(?)

var inputField: UITextField = { let field = UITextField() field.layer.cornerRadius = 10 field.layer.borderColor = UIColor.lightGray.cgColor field.layer.borderWidth = 0.5 field.attributedPlaceholder = NSAttributedString( string: field.placeholder ?? " ", //텍스트필드를 그릴 때 placeholder가 nil이면 아래의 attributes가 안먹힘. 어떤 값이든 넣어줄 것 attributes: [NSAttributedString.Key.foregroundColor: UIColor.lightGray]) fiel..

iOS 2023.06.19

iOS ) 키체인 CRUD 모델 및 테스트

아주 특수한 사정으로...........^^.......................................................................... 키체인을 사용해보게 되었다. 주의사항: 앱을 제거해도 키체인 데이터가 남아있음 import Foundation class KeyChainManager { static let shared = KeyChainManager() //MARK: Store key-value pair in KeyChain func addItem(key: Any, value: Any) -> Bool { let addQuery: [CFString: Any] = [ kSecClass: kSecClassGenericPassword, //데이터 종류 지정 kSecAt..

iOS 2023.06.13

2023 Let us go 찍먹톤 참가 후기..

wwdc23 주제로 해커톤이 열린다는 소식을 듣고.. 참가신청을 했었는데 운좋게(?) 참여하게 될 수 있었다 Xcode 15 베타에서 작업했는데 생각보다 버그도 없었고 (물론 나중에 버그생김^^) 팀원들 모두 SwiftUI를 사용해본 적이 없었는데, 해보자! 하고 시작하게 되었는데... 앱이 일단은.. 단순한 UI로 구성되어 있어서 그런지 UI 작업은 크게 어렵지 않았고, 재미있었다. 뭣... 오토레이아웃을 안잡아도 된다고? 너무 신기했다 복잡한 UI도 스택만으로 그려지나..? 생각하긴 했지만 다 방법이 있겠지! 문법같은 것들도 다른 부분이 있어서.. 별거 아닌 부분에서 애먹기도 하고.. 확실히 경력이 좀 더 많은 분들은 훨씬 금방 적응하셔서 작업하는 것 같았다. 문제는.. 프로젝트도 스유도 아니었다 깃..

이것저것 2023.06.12