백준 2577번 Swift 알고리즘 연습
한동안 알고리즘 공부를 못했다... 애플 개발자 아카데미가 본격적으로 시작하고나니
눈코 뜰새 없이 바빠서 알고리즘 볼 여유가 없었다라는 변명을 해본다...
(진짜 바쁘긴 했음😅)
* 2577번
1) 1차 답안
var a = Int(readLine()!)!
var b = Int(readLine()!)!
var c = Int(readLine()!)!
var d = String(a * b * c)
var count0 = 0
var count1 = 0
var count2 = 0
var count3 = 0
var count4 = 0
var count5 = 0
var count6 = 0
var count7 = 0
var count8 = 0
var count9 = 0
for i in d {
if i == "0" {
count0 += 1
}
}
print(count0)
for i in d {
if i == "1" {
count1 += 1
}
}
print(count1)
for i in d {
if i == "2" {
count2 += 1
}
}
print(count2)
for i in d {
if i == "3" {
count3 += 1
}
}
print(count3)
for i in d {
if i == "4" {
count4 += 1
}
}
print(count4)
for i in d {
if i == "5" {
count5 += 1
}
}
print(count5)
for i in d {
if i == "6" {
count6 += 1
}
}
print(count6)
for i in d {
if i == "7" {
count7 += 1
}
}
print(count7)
for i in d {
if i == "8" {
count8 += 1
}
}
print(count8)
for i in d {
if i == "9" {
count9 += 1
}
}
print(count9)
시행착오는 많이 거치지 않았다.
- 논리는 굉장히 단순했다.
- Int로 값을 받아 곱 연산을 실행하고 값을 구한다.
- 받은 값을 다시 String 형태의 문자로 바꾼 뒤 그 문자들을 배열에 하나하나 넣어서
- 하나하나 1, 2, 3, 4... 한 번씩 비교를 통해 같은 값일 경우 count + 1 해준다.
- 여기서 처음 막혔던 부분은 Int로 받은 값을 그대로 String 형태의 배열로 저장해내는 방법이었다.
2) 2차 답안
var a = Int(readLine()!)!
var b = Int(readLine()!)!
var c = Int(readLine()!)!
var d = String(a * b * c)
var count = [0,0,0,0,0,0,0,0,0,0,0]
for i in d {count[Int(String(i))!] += 1
}
for i in 0...9 {
print(count[i])
}
1차 답안과 비교해봤을 때 말도 안되게 간소화되었다. 사실 1차 답안을 제출하면서도 이건 좀 아니지 싶을 정도로 비효율이 느껴져서 궁금한 점을 알아보고 물어봐서 새로운 답을 찾아냈다.
- 우선 프린트해줄 카운트 값을 애초에 배열 형태로 만들었다.
- 그리고 그 배열의 위치에 맞게(count[0]...count[9]) 값을 정의해주었다.
- for 문에서 i의 형태는 String이 아닌 String.element이므로 count[Int(i)!]만 정의하면 오류가 뜬다.
- 그래서 i를 다시 String으로 바꾼뒤 그걸 다시 Int로 바꾸었다.
- 그 후 d의 값이 0이 나오면 count[0] += 1, d의 값이 5가 나오면 count[5] += 1... 이런식으로 간소화했다.
- 마지막으로 count의 배열에 있는 원소들을 0...9까지 for문을 돌려 차례로 프린트하였다.
정리(Today I Learned)
- Int형태의 값을 String으로 변환할 수 있는 것 뿐만 아니라, 배열 형태로 담을 수도 있다.
- for문에서 i의 형태는 String.element이다!
- for문은 정말 다양하게 적용 가능하다!