TIL/알고리즘 공부

프로그래머스 Lv. 2 Swift 알고리즘 - 모음 사전

여의도사노비 2023. 1. 20. 16:18
728x90

이 문제는 뭔가 묘하다.

답은 맞았지만 정말 야매로 맞은 것만 같은 느낌... 시간 제한이 없어서 그런것 같다...

시간 제한이 있었다면 전부 틀렸을듯 ^-^

프로그래머스에서 문제를 보면 완전탐색 문제더라! 굳이 함수로 만들지 않아도 됐지만... 완전탐색을 할 수 있는 함수도 따로 만들어보았다.

 

그냥 가능한 가짓수를 전부 만들어서 배열에 때려 박고 아주 좋은 기능인 sorted 메소드 써주고 완전탐색 해주면 끝 ㅎ

 

 

 

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

  1. arr에 한 글자만 들어가는 경우, 두 글자 들어가는 경우... 5글자 모두 들어가는 경우를 모두 arr에 추가한다.
  2. 그 다음 이 모든 원소가 모여져있는 arr를 정렬하고
  3. 원소 하나하나 비교해주는 완전탐색을 사용하면 끝!
  4. 아 근데 Count로 횟수를 세어주어야 하니 몇번만에 탐색이 끝났는지 알려주는 count도 추가!

 

 

* 코드

func solution(_ word: String) -> Int {
    let arrWord = ["A", "E", "I", "O", "U"]
    var arr: [String] = []
    
    for a in arrWord {
        arr.append(a)
    }
    
    for a in arrWord {
        for b in arrWord {
            arr.append(a + b)
        }
    }
    
    for a in arrWord {
        for b in arrWord {
            for c in arrWord {
                arr.append(a + b + c)
            }
        }
    }
    
    for a in arrWord {
        for b in arrWord {
            for c in arrWord {
                for d in arrWord {
                    arr.append(a + b + c + d)
                }
            }
        }
    }
    
    for a in arrWord {
        for b in arrWord {
            for c in arrWord {
                for d in arrWord {
                    for e in arrWord {
                        arr.append(a + b + c + d + e)
                    }
                }
            }
        }
    }
    
    arr = arr.sorted()
    
    return sequencial(arr, word: word)
}

func sequencial(_ array: [String], word: String) -> Int {
    var count = 0
    
    for element in array {
        count += 1
        
        if word == element {
            return count
        }
    }
    return 0
}
 
 

정리(Today I Learned)

  1. 조금 더 고급진 방법이 없을까 하고 구글링을 해보니 문제의 표면만 생각하고 풀지 않은 분이 계셨다.
  2. 평소에도 자주 참고하던 블로그를 운영하시는 분의 코드인데 솔직히 아직도 이해가 잘 안가긴 하지만 효율성 면에서 미친것 같다!!
  3. 완전탐색이니까 모든 배열의 원소들을 하나씩 다 비교해도 맞겠지~ 하며 넘어가는 것도 효율적일 수 있겠지만...
  4. 이렇게 문제를 해석하는 방식을 한차원 높이는 것이 더 멋지다!
  5. https://fomaios.tistory.com/entry/Swift-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9C%84%ED%81%B4%EB%A6%AC-%EC%B1%8C%EB%A6%B0%EC%A7%80-5%EC%A3%BC%EC%B0%A8-%EB%AA%A8%EC%9D%8C-%EC%82%AC%EC%A0%84
 

[Swift] 프로그래머스 위클리 챌린지 5주차 모음 사전

Problem 코딩테스트 연습 - 5주차 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"

fomaios.tistory.com