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..

전체 글
나의 성장 기록문제 링크카카오 코딩테스트: 이모티콘 할인행사문제 분석먼저 이 문제는 중복순열을 활용해야 하는 문제로서, 각 이모티콘마다 rates 적용한 경우의 수에서,문제에 제시된 두 목표일 때의, (이모티콘 플러스 서비스 가입 수와 이모티콘 매출액) 값을 갱신시켜나가야 하는 문제다.이 문제의 경우, 중복순열을 여러가지 방법으로 구현해보는 연습을 해보았다.특히 비트마스킹의 경우, 지금까지 2^n 가지 경우의 수 문제. 즉 2가지 선택을 n번 반복하는 경우에 대해서, 적용하는 문제에만 적용해왔는데,4^n 의 경우에는 1비트가 아니라 2비트를 사용하기에 이렇게도 코드를 짤 수 있구나. 생각해볼 수 있던 문제였다.물론, 4진법을 활용해서도 풀어보았다.구현하기에는 재귀방법이 가장 간단하고 빠르다. 그러나 학습을 위해 다양한..
Protocols프로토콜이란프로토콜은 특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다.구조체, 클래스, 열거형에서 프로토콜을 채택 해서 프로토콜의 요구사항을 구현 프로토콜은 정의를 하고 제시를 할 뿐, 스스로 기능을 구현하지는 않습니다. 프로토콜 구문protocol SomeProtocol { // protocol definition goes here}구조체, 클래스, 열거형에서 프로토콜을 채택 예시struct SomeStructure: FirstProtocol, AnotherProtocol { // structure definition goes here}class SomeClass: SomeSuperclass, FirstProtocol, AnotherProto..
문제 상황iOS 앱스쿨의 첫 번째 프로젝트로 진행한 'Packing' (패킹) 앱에 들어갈 여행 목록을 볼 수 있는 뷰를 구성하다가, 디자인이 복잡해지자 코드를 더 이상 수정하기 어려워지고, 다른 사람이 보기에도 깔끔하지 않은 코드가 되었다.예를 들어 다른 팀원이 내가 구성한 background 코드를 재사용하려고 할 때, 코드가 지저분해질 수 있다.(앱 내에서 공통으로 사용하는 배경 코드를 바꾸려고 할 때, view 마다 다시 들어가서 코드를 바꿔줘야 하는 등의 문제) 이럴 때, ViewModifier 를 사용할 수 있다. 어떻게 해결하였는가?복잡해진 view 코드를 리팩토링 할 때, 이전처럼 some view 프로토콜을 따르는 변수들을 만들어 보려고 하였다.struct TestView: View..
기본 중의 기본 이므로, 글을 쓰면서 정리하고 또 복습 하였다. Swift 타입 관련 개념 데이터 타입 안심 Safe. 스위프트의 특징 중 하나. 스위프트는 타입에 굉장히 엄격하기에, 서로 다른 타입끼리의 데이터 교환은 꼭 타입캐스팅(형변환)을 거쳐야 한다! 정확히 말하면, 스위프트에서 값 타입의 데이터 교환은 새로운 인스턴스를 생성하여 할당하는 것이다. 타입 캐스팅에 대한 설명(조금 더 공부할 예정) 더보기 V 더보기 타입 캐스팅과 타입 검사 컴파일러가 어떤 값의 특정 타입을 식별하지 못하는 경우 메서드, 함수가 반환하는 값이 불명확하거나 예상되지 않은 타입의 값일 때 발생 이럴 때는 as 키워드를 사용하여 내가 의도한 타입을 컴파일러가 알 수 있게 해야 한다. 이것을 타입 캐스팅(형 변환) 이라고 한..
제네릭을 사용하지 않는 전통적인 방식에서는, 특정 타입의 값만을 교환할 수 있는 함수를 여러 개 만들어야 한다. 여러 데이터 타입을 스왑할 수 있는 함수를 만드는 경우를 예시로 들어보자. 이 때 우리는, 정수형(Int) 값을 교환하는 함수, 문자열(String) 값을 교환하는 함수, 그리고 실수형(Double) 값을 교환하는 함수 등이 필요하다.. 이런 방식은 코드 중복을 발생시키고, 유지보수를 어렵게 만든다. func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a a = b b = temporaryA } 이 함수는 inout 매개변수를 사용하여 a와 b의 값을 교환한다. 만약 문자열이나 실수형 값을 교환하고 싶다면, 각각의 타입에 맞..
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..
오늘 푼 문제 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 로 계산기를 만들어보고 이를 통해 배운 내용을 정리하였다. 두 가지 방식으로 구현하였다. 1. 직접 calculate() 함수를 만드는 방법 2. NSExpression 을 사용한 방법 1. 직접 calculate() 함수를 만드는 방법 먼저, 직접 calculate 함수를 만드는 방법은 다음과 같다. 1. View 먼저, 계산기에 들어갈 button view 를 만든다. 계산기의 버튼은 다음과 같이 [String] 으로 만들어서, view 안에서는 중첩 Foreach 문을 사용하여 레이아웃을 만들 수 있다. 디스플레이에 표시할 계산기의 결과는 inputValue로 설정하였다. 1. @State inputValue 는 @State (상태 프로퍼티) 로 선언하였다. 계산기의 버튼을 눌러 해당..
오늘 배운 내용 class VS struct struct 는 값 타입이다. 이것은 struct의 인스턴스를 다른 변수에 할당하거나 함수에 전달할 때, 해당 인스턴스의 복사본이 생성되고 전달된다는 것을 의미한다. myStruct1을 myStruct2에 할당한 후 myStruct2의 name을 변경하면, myStruct1의 name은 변경되지 않는다. 이는 두 구조체 인스턴스가 서로 독립적인 복사본이기 때문이다. class 는 참조 타입이다. 클래스의 인스턴스를 다른 변수에 할당하거나 함수에 전달할 때, 인스턴스 자체가 아닌 그 인스턴스를 가리키는 참조가 전달된다. myClass1을 myClass2에 할당한 후 myClass2의 name을 변경하면, myClass1의 name도 변경된다. 이는 myClass..