본문 바로가기

알고리즘10

[프로그래머스] (Swift) 순위 문제 보러가기 문제 읽기 n 명의 권투선수들이 1대1로 대결한다. a가 b보다 순위가 높다면 a는 b를 항상 이긴다. 경기 결과에는 모순이 없다. a가 b를 이기고 b가 c를 이겼는데 c가 a를 이기는 결과는 없다. 경기 결과를 몇 개 잃어버려서, 전체 순위를 정확하게 매길 수 없다. 주어진 결과만을 가지고 순위를 확정할 수 있는 선수의 수를 구하자. 생각하기 처음에 생각했던 방법은 다음과 같다. 이차원 배열에 각 선수별로 가능한 등수 [1…n] 저장해두기 다른 이차원 배열에 결과 저장하면서 이겼다면 가능한 등수를 뒤에서 빼고 졌다면 앞에서 빼기 가능한 등수가 하나 남은 선수 확정짓기 그 선수와 관련된 선수들의 가능한 등수 정리하기 바꾸는 게 없을 때까지 3, 4번 과정을 반복하기 여기서 문제는 2번이었.. 2022. 11. 16.
[프로그래머스] (Swift) 위장 문제 보러 가기 문제 스파이들이 여러 종류의 옷들을 겹치지 않게 입으려고 한다. 각 종류당 하나의 옷을 입을 수 있고 입지 않는 종류가 있어도 괜찮다. 하지만 최소 한 개의 종류는 입어야 한다. 해결 Dictionary 만들기 의상 이름, 종류 순으로 String 배열이 들어오는데 총 조합의 개수만 알아내면 되므로 이름은 신경쓰지 않아도 된다. 같은 종류에 새로운 이름이 들어올 때마다 value를 +1 해준다. Dictionary에 종류를 key, 개수를 value로 저장해준다. 경우의 수 구하기 어떤 수의 약수의 개수는 소인수분해 후 각 밑의 지수 + 1끼리의 곱으로 구할 수 있다. 각 밑을 0번, 1번, 2번, … n번 사용해 수를 만들 수 있기 때문이다. 같은 원리를 사용한다. 한 종류 안에서 n개.. 2022. 10. 5.
[LeetCode] (Swift) 13. Roman to Integer 문제 보러 가기 문제 로마 숫자는 7가지 다른 문자로 표현된다: I, V, X, L, C, D, M 각 문자가 나타내는 숫자는 다음과 같다. 예를 들어, 2는 1 + 1 이므로 II 12는 10 + 2 이므로 XII 27은 20 + 5 + 2 이므로 XXVII. 로마 숫자는 주로 왼쪽부터 오른쪽으로, 큰 숫자에서 작은 숫자로 쓴다. 하지만 4는 IIII 로 쓰지 않고 1을 5 앞에 쓰고 5 - 1 을 해 IV 로 쓴다. 같은 원리로 9는 10 - 1 이므로 IX 로 쓴다. 빼기를 사용하는 여섯 가지 경우가 있다. V 와 X 앞에 I : 4, 9 L과 C 앞에 X: 40, 90 D와 M 앞에 C: 400, 900 → 로마 숫자가 주어지면 정수로 변환해라. 풀이 오른쪽으로 가면 숫자가 작아져야 하는데 여섯 .. 2022. 9. 14.
[백준] (Swift) 2675 문자열 반복 2675 문자열 반복 반복할 횟수와 반복할 문자열을 입력받아 문자열의 각 문자들을 입력받은 횟수만큼 출력한다. 한 줄에 횟수와 문자열이 같이 나오므로, String으로 받은 후 횟수만 Int로 형변환해 사용한다. 테스트 케이스를 여러 개 받는데 한 케이스에서는 개행이나 공백 없이 이어 쓰고, 각 케이스를 개행으로 구분해서 출력해준다. import Foundation for _ in 1...Int(readLine()!)! { let test = readLine()!.components(separatedBy: " ") for c in test[1] { for _ in 1...Int(test[0])! { print(c, terminator: "") } } print("") } 2022. 7. 11.