전체 글

나의 성장 기록
· Algorithm
https://school.programmers.co.kr/learn/courses/30/lessons/17687 (1) 0, 1, 2, 3, ... 각각을 n진수로 변환시키고, (2) "0", "1", "1", "0", "1", "1" ... 이렇게 쭉 하나의 배열로(arr) 만들고,(3) 그 문자열에서 p - 1번째, p - 1 + m 번째, 그리고 p - 1 + 2*m 번째, ... 의 인덱스의 문자들을 총 t개 뽑으면 된다. 튜브가 t번째 숫자를 말할 때는p + (t-1) * m번째 턴까지 필요하다. 틀린 코드 이때, arr을 배열이 아닌, 하나의 문자열로 만들고, String.index 를 사용하게 되면 시간초과가 날 수 있다.index(_:offsetBy:)는 공식문서에 나와있듯이 O(1..
· Algorithm
문제 링크카카오 코딩테스트: 이모티콘 할인행사문제 분석먼저 이 문제는 중복순열을 활용해야 하는 문제로서, 각 이모티콘마다 rates 적용한 경우의 수에서,문제에 제시된 두 목표일 때의, (이모티콘 플러스 서비스 가입 수와 이모티콘 매출액) 값을 갱신시켜나가야 하는 문제다.이 문제의 경우, 중복순열을 여러가지 방법으로 구현해보는 연습을 해보았다.특히 비트마스킹의 경우, 지금까지 2^n 가지 경우의 수 문제. 즉 2가지 선택을 n번 반복하는 경우에 대해서, 적용하는 문제에만 적용해왔는데,4^n 의 경우에는 1비트가 아니라 2비트를 사용하기에 이렇게도 코드를 짤 수 있구나. 생각해볼 수 있던 문제였다.물론, 4진법을 활용해서도 풀어보았다.구현하기에는 재귀방법이 가장 간단하고 빠르다. 그러나 학습을 위해 다양한..
· Swift
Protocols프로토콜이란프로토콜은 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다.구조체, 클래스, 열거형에서 프로토콜을 채택 해서 프로토콜의 요구사항을 구현 프로토콜은 정의를 하고 제시를 할 뿐, 스스로 기능을 구현하지는 않습니다. 프로토콜 구문protocol SomeProtocol { // protocol definition goes here}구조체, 클래스, 열거형에서 프로토콜을 채택 예시struct SomeStructure: FirstProtocol, AnotherProtocol { // structure definition goes here}class SomeClass: SomeSuperclass, FirstProtocol, AnotherProto..
· SwiftUI
문제 상황iOS 앱스쿨의 첫 번째 프로젝트로 진행한 'Packing' (패킹) 앱에 들어갈 여행 목록을 볼 수 있는 뷰를 구성하다가, 디자인이 복잡해지자 코드를 더 이상 수정하기 어려워지고, 다른 사람이 보기에도 깔끔하지 않은 코드가 되었다.예를 들어 다른 팀원이 내가 구성한 background 코드를 재사용하려고 할 때, 코드가 지저분해질 수 있다.(앱 내에서 공통으로 사용하는 배경 코드를 바꾸려고 할 때, view 마다 다시 들어가서 코드를 바꿔줘야 하는 등의 문제) 이럴 때, ViewModifier 를 사용할 수 있다.    어떻게 해결하였는가?복잡해진 view 코드를 리팩토링 할 때, 이전처럼 some view 프로토콜을 따르는 변수들을 만들어 보려고 하였다.struct TestView: View..
· Swift
기본 중의 기본 이므로, 글을 쓰면서 정리하고 또 복습 하였다. Swift 타입 관련 개념 데이터 타입 안심 Safe. 스위프트의 특징 중 하나. 스위프트는 타입에 굉장히 엄격하기에, 서로 다른 타입끼리의 데이터 교환은 꼭 타입캐스팅(형변환)을 거쳐야 한다! 정확히 말하면, 스위프트에서 값 타입의 데이터 교환은 새로운 인스턴스를 생성하여 할당하는 것이다. 타입 캐스팅에 대한 설명(조금 더 공부할 예정) 더보기 V 더보기 타입 캐스팅과 타입 검사 컴파일러가 어떤 값의 특정 타입을 식별하지 못하는 경우 메서드, 함수가 반환하는 값이 불명확하거나 예상되지 않은 타입의 값일 때 발생 이럴 때는 as 키워드를 사용하여 내가 의도한 타입을 컴파일러가 알 수 있게 해야 한다. 이것을 타입 캐스팅(형 변환) 이라고 한..
· Swift
제네릭을 사용하지 않는 전통적인 방식에서는, 특정 타입의 값만을 교환할 수 있는 함수를 여러 개 만들어야 한다. 여러 데이터 타입을 스왑할 수 있는 함수를 만드는 경우를 예시로 들어보자. 이 때 우리는, 정수형(Int) 값을 교환하는 함수, 문자열(String) 값을 교환하는 함수, 그리고 실수형(Double) 값을 교환하는 함수 등이 필요하다.. 이런 방식은 코드 중복을 발생시키고, 유지보수를 어렵게 만든다. func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA } 이 함수는 inout 매개변수를 사용하여 a와 b의 값을 교환한다. 만약 문자열이나 실수형 값을 교환하고 싶다면, 각각의 타입에 맞..
· Git & GitHub
commit - 버전(타임캡슐) 담아 묻기 git add . git add 파일 git commit git commit -m "" ## add 와 커밋 메시지와 함께 커밋 (새로 추가한 파일은 포함 안되므로 git add 해야 함) git commit -am ""과거로 돌아가기 reset: 과거의 커밋으로 되돌아가는데, 과거의 커밋 이후의 커밋들은 전부 삭제 revert: 과거의 커밋의 변경사항만을 현재로 가져오는 것 # reset git reset --hard {commit} # 아직 커밋하지 않은 내용을 전부 지움. 즉 마지막 커밋 상태로 되돌아감 git reset --hard # revert git revert {commit} # no commit revert git revert --no-commi..
· Algorithm
오늘 푼 문제 https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import Foundation func solution(_ number:String, _ k:Int) -> String { var k = k var stack = [Character]() for num in number { while !stack.isEmpty && k > 0 && stack.last! < num { stack.removeLast() k -= 1 } stack.ap..
· SwiftUI
SwiftUI 로 계산기를 만들어보고 이를 통해 배운 내용을 정리하였다. 두 가지 방식으로 구현하였다. 1. 직접 calculate() 함수를 만드는 방법 2. NSExpression 을 사용한 방법 1. 직접 calculate() 함수를 만드는 방법 먼저, 직접 calculate 함수를 만드는 방법은 다음과 같다. 1. View 먼저, 계산기에 들어갈 button view 를 만든다. 계산기의 버튼은 다음과 같이 [String] 으로 만들어서, view 안에서는 중첩 Foreach 문을 사용하여 레이아웃을 만들 수 있다. 디스플레이에 표시할 계산기의 결과는 inputValue로 설정하였다. 1. @State inputValue 는 @State (상태 프로퍼티) 로 선언하였다. 계산기의 버튼을 눌러 해당..
· Swift
오늘 배운 내용 class VS struct struct 는 값 타입이다. 이것은 struct의 인스턴스를 다른 변수에 할당하거나 함수에 전달할 때, 해당 인스턴스의 복사본이 생성되고 전달된다는 것을 의미한다. myStruct1을 myStruct2에 할당한 후 myStruct2의 name을 변경하면, myStruct1의 name은 변경되지 않는다. 이는 두 구조체 인스턴스가 서로 독립적인 복사본이기 때문이다. class 는 참조 타입이다. 클래스의 인스턴스를 다른 변수에 할당하거나 함수에 전달할 때, 인스턴스 자체가 아닌 그 인스턴스를 가리키는 참조가 전달된다. myClass1을 myClass2에 할당한 후 myClass2의 name을 변경하면, myClass1의 name도 변경된다. 이는 myClass..
iyungui
iyungui