최근 몇주는 부트캠프 준비때문에 알고리즘을 빡세게 준비하느라 프로젝트나 CS 공부를 거의 못했지만.. 이젠 끝났으니 다시 시작. 요즘에는 기존 프로젝트를 리팩토링 하는 작업을 하고 있다. 만드는것보다 리팩토링 하는게 더 어렵다. 이번에는 객체지향 생활체조 원칙중 하나인 "모든 원시 값과 문자열을 포장합니다."를 준수해서 리팩토링 해보았다. 우선 리팩토링한 부분에 대해 설명하자면 아래와 같다. 첫번째 사진의 목표거리와 목표 시간의 숫자부분을 터치해서 설정화면으로 이동해서 거리와 시간을 설정하고 우측 상단의 설정버튼을 누르면 설정한 거리가 적용되도록 만들었던 기능이다. 리팩토링 전 목표 설정 로직은 다음과 같다. ViewModel에서 현재 목표 값을 목표 설정 화면을 생성할 때 할당한다. 이때 시간은 초단위..
https://school.programmers.co.kr/learn/courses/30/lessons/17679 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 구현 + 시뮬레이션 문제 같은 모양의 블록이 2 * 2 이상 짝수로 붙어 있을 시 그 블록들을 지우고, 위에 있는 블록이 아래로 내려온다. 풀이 방식: 보드를 가로 n-1, 세로 n-1을 반복해서 탐색한다. 탐색하는 블록의 x+1, y+1, (x+1, y+1)이 같은 모양인지 체크하고 모두 같은 모양일 시 removeLocation에 해당 블록의 위치를 저장한다. 탐색을 모두 마쳤다면 remove..
https://school.programmers.co.kr/learn/courses/30/lessons/17677# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 합집합, 교집합만 올바르게 구현 할 수 있다면 쉬운 문제. 집합에서 동일한 원소값 여럿 있다면, 교집합의 경우 제일 적은 집합의 수만큼 넣고, 합집합의 경우 가장 많은 수만큼 넣는다. 한쪽에만 동일한 여러개의 원소가 있는 경우에도, 이때 상대에게 0개가 있는것으로 치니 한쪽의 수만큼 넣어야 한다. 해설을 보면 병합정렬을 응용하면 쉽게 구현할 수 있다던데, 한번 알아봐야겠다. 소요시간: 50분 i..
https://www.acmicpc.net/problem/2116 2116번: 주사위 쌓기 첫줄에는 주사위의 개수가 입력된다. 그 다음 줄부터는 한 줄에 하나씩 주사위의 종류가 1번 주사위부터 주사위 번호 순서대로 입력된다. 주사위의 종류는 각 면에 적혀진 숫자가 그림1에 있는 www.acmicpc.net 첫번째 주사위에 따라서 그 위에 쌓여 있는 주사위의 옆면이 결정된다. 주사위의 도면이 주어졌으므로, 첫번째 주사위의 아랫면이 1부터 6까지일때 각 경우를 따져서, 그 위에 주사위의 옆면 시뮬레이션 했다. 주사위 도면에다가, 각 주사위의 윗면과 아랫면을 제거해서 옆면을 구하는 방식으로 풀었다. import Foundation let n = Int(readLine()!)! var diceArr: [[Int..