본문 바로가기
반응형

분류 전체보기282

[Swift] 문자열에서 특정 문자 한 개 또는 여러 개 제거하기 PS에서 입력을 파싱해서 사용해야 할 때가 있다. 얼마전 숫자 N개를 공백으로 구분해서 주지 않고 콤마로 구분한 뒤, 심지어 괄호 안에 담아서 [1,2,3,4,5] 이렇게 주는 문제를 만났다ㅠㅠ 공백 대신 콤마로 주는 건 split의 separator를 ", "로 바꿔주기만 하면 되는데, 앞 뒤에 대괄호를 떼어내는 게 문제.. 인덱스로 앞 뒤 잘라내는 방법도 있겠지만 스위프트에서 문자열 인덱스 다루는 게 제일 귀찮은 일이어서ㅎㅎ 그냥 괄호를 없애버리는 방법을 찾았다. 문자열 내에서 Target Substring을 모두 찾아 원하는 Replacement 문자열로 바꿔주는 replacingOccurrences라는 메소드가 있다. func replacingOccurrences(of target: Target,.. 2022. 1. 18.
백준 10026번 적록색약 - 스위프트(Swift) 풀이 1. 그리드의 각 칸을 그래프의 정점으로 생각한다. 2. 인접한 칸의 색이 같은 색이면 간선으로 연결한다. 3. 어떤 칸을 시작점으로 DFS/BFS를 하면 해당 칸이 속하는 구역 내의 모든 칸을 방문할 수 있다. 4. 따라서 DFS/BFS의 호출 횟수가 곧 구역의 개수이다. 5. 적록색약인 경우 그리드의 R과 G를 같은 색으로 취급해준다. 1. 그리드의 각 칸을 그래프의 정점으로 생각한다. 그리드 전체를 그래프로 생각할 수 있다. 각 칸을 정점으로 둔다. 2. 인접한 칸의 색이 같은 색이면 간선으로 연결한다. 상하좌우로 인접한 칸이 같은 색이면 같은 구역이므로, 간선으로 연결해준다. 이러면 같은 구역인 정점끼리만 간선으로 연결될 것이다. 3. 어떤 칸을 시작점으로 DFS/BFS를 하면 해당 칸이 속하는 .. 2022. 1. 18.
백준 5430번 AC - 스위프트(Swift) 풀이 + 그림 설명 1. 맨 앞을 가리키는 front, 맨 뒤를 가리키는 end, 역방향 여부를 저장하는 변수 reverse를 둔다. 2. R이 들어오면, swap(front, end)와 reverse.toggle()로 배열을 뒤집는 연산을 구현한다. 3. D가 들어오면 정방향이면 front++ 역방향이면 front--로 맨 앞 삭제를 구현한다. 4. front와 end의 대소 비교 + reverse 여부를 가지고 빈 배열인지 판단한다. 1. 맨 앞을 가리키는 front, 맨 뒤를 가리키는 end, 역방향 여부를 저장하는 변수 reverse를 둔다. 진짜로 배열을 뒤집으면 시간 초과가 날 것이다. 진짜로 배열을 뒤집지 말고, 생각만 뒤집는다. 왼쪽부터 읽던 것을 오른쪽부터 읽는 것처럼 말이다. 이것을 위해 front, en.. 2022. 1. 18.
백준 2667번 단지번호붙이기 - 스위프트(Swift) 풀이 + 그림 설명 1. 각 집을 그래프의 정점으로 생각한다. 2. 어떤 집을 시작점으로 DFS/BFS를 하면 해당 집이 속하는 단지 내의 모든 집을 방문할 수 있다. 3. 따라서 DFS/BFS의 호출 횟수가 곧 단지의 개수이고, 4. DFS/BFS를 돌면서 방문한 정점의 수가 한 단지 내에 속한 집의 수이다. 1. 각 집을 그래프의 정점으로 생각한다. 0인 곳은 갈 수 없으므로 무시하고, 1인 곳을 정점이라고 생각한다. 2. 어떤 집을 시작점으로 DFS/BFS를 하면 해당 집이 속하는 단지 내의 모든 집을 방문할 수 있다. (1, 1)을 시작점으로 그래프를 탐색해주면, 해당 단지 내의 모든 집을 방문할 수 있다. 탐색 방법은 DFS/BFS를 쓰면 된다. 이때 연결되지 않은 (1,4)와 (2,4)가 속한 단지는 방문을 하지.. 2022. 1. 17.
백준 1676번 팩토리얼 0의 개수 - 스위프트(Swift) 풀이 수학 문제. 1. 뒤에 붙는 0의 개수는 10이 몇 번 곱해졌는지와 같다. 2. 10을 소인수분해하면 10 = 2 X 5이다. 2. 따라서 N! 을 소인수분해했을 때 min(2의 개수, 5의 개수)가 맨 뒤에 붙는 0의 개수이다. 3. 2의 개수가 5의 개수보다 많을 테니, 5의 개수를 세준다. 1. 뒤에 붙는 0의 개수는 10이 몇 번 곱해졌는지와 같다. 어떤 수의 뒤에 0이 붙으려면 10을 곱해야 한다. 따라서 N! 을 계산할 때 10이 몇 번 곱해졌는지를 세면 된다. 1. 10을 소인수분해하면 10 = 2 X 5이다. 10을 소인수분해하면 2 X 5이다. 따라서 어떤 수에 10을 곱한다는 말은 2와 5를 모두 한 번씩 곱해준다는 말이다. 2. 따라서 N!을 소인수분해했을 때 min(2의 개수, 5의.. 2022. 1. 17.
반응형