TIL/알고리즘 공부

백준 4673번 Swift 알고리즘 연습

여의도사노비 2022. 8. 4. 18:38
728x90

그간 여러가지 프로젝트를 진행하느라 알고리즘 공부를 소홀히 했다.. (돌아보면 뭐했는지 모르겠지만... ㅠ)

문제가 어렵지는 않았기도 했지만 앱 개발을 하며 스위프트 논리를 어느 정도 적용하다보니,

알고리즘을 해결하는 것도 점점 익숙해지는 부분이 있는 것 같다.

 

이 문제를 풀면서 생각한 논리적 흐름은

1. '셀프넘버'를 논리적으로 구해내는 것이 더 어려울 것 같다는 생각

2. 눈에 보이는 논리(M = N + N의 1의 자릿수 + N의 10의 자릿수 + ... )를 먼저 이용해보자는 것

3. 그래서 '셀프넘버'가 아닌 수들을 전부 배열에 넣어버리고(중복 값이 있을까봐 set 사용)

4. 마지막으로 이를 1 ... 10000 까지의 set 배열과의 차집합을 통해 값을 구해내보자

 

위와 같이 진행하였다.

 

사실 풀고도 훨씬 더 간단한 방법이 있을 것이라고 보여진다. 하지만 항상 그렇듯이 더 간결하고 나은 답을 찾기가 왜 이리 귀찮은걸까..ㅠㅠ

 

* 4673번

아무 생각없이 제출했다가 틀려서 화들짝 놀랐다

 

정리(Today I Learned)

  1. append와 insert는 항상 헷갈린다. Array에서는 append 가능... set에서는 불가능... 대신 insert 사용!
  2. subtract와 subtracting은 차이가 있다! subtracting은 원값이 변하지 않은 상태에서 적용되고, subtract는 원값을 변경시킨다!