TIL/알고리즘 공부

백준 2577번 Swift 알고리즘 연습

여의도사노비 2022. 4. 15. 19:16
728x90

한동안 알고리즘 공부를 못했다... 애플 개발자 아카데미가 본격적으로 시작하고나니

눈코 뜰새 없이 바빠서 알고리즘 볼 여유가 없었다라는 변명을 해본다...

(진짜 바쁘긴 했음😅)

 

* 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)

  1. Int형태의 값을 String으로 변환할 수 있는 것 뿐만 아니라, 배열 형태로 담을 수도 있다.
  2. for문에서 i의 형태는 String.element이다!
  3. for문은 정말 다양하게 적용 가능하다!