문제를 잘 읽자

권승용(Eric)·2024년 12월 18일

TIL

목록 보기
23/38

배경

  • 알고리즘 문제를 풀던 도중 하나의 테스트 케이스만 실패하는데, 도무지 해당 테스트 케이스가 무엇인지 모르겠는 상황이 있었다.

문제 상황

  • 프로그래머스 - 단어 변환 문제를 풀고 최종 제출 하였는데, 테스트케이스 3번이 계속 실패했다.
  • 어디가 문제일까 고민하며 BFS 알고리즘만 고민하고 있었다.

무엇이 문제였나

  • 해당 문제의 질문 탭에서 힌트를 얻었다.
  • 다른 단어와 비교하여 한 글자만 다른지 아닌지를 판별하는 로직이 문제였다.
    • aab 와 aac 는 한 글자가 다르다. true!
    • abc와 acd는 두 글자가 다르다. false
  • 나는 해당 로직을 Set을 사용해 구현했었다.
func compare(_ lh: String, _ rh: String) -> Bool {
    let lhSet = Set(lh)
    let rhSet = Set(rh)
    return lhSet.intersection(rhSet).count == lhSet.count - 1
}
  • 그러나 위 로직은 서로 다른 위치의 글자가 다른 경우도 한 글자만 다른 단어로 식별하게 된다.
    • aab와 caa도 true를 반환
    • 그러나 같은 자리의 글자가 다른 경우에만 true를 반환해야 한다.
  • 아래와 같이 배열로 변환해 각 인덱스의 글자마다 일대일 비교를 통해 서로 다른 글자의 갯수를 알아내는 로직으로 변환해 문제를 해결하였다.
func compare(_ lh: String, _ rh: String) -> Bool {
    let lhArr = Array(lh)
    let rhArr = Array(rh)
    var diffCount = 0
    for i in lhArr.indices {
        if lhArr[i] != rhArr[i] {
           	diffCount += 1   
        }
    }
    return diffCount == 1
}

오늘의 교훈

  • 문제 조건을 잘 읽기!
  • 잘 안 풀릴 땐 전체 코드 재점검하기.
profile
ios 개발자에용

0개의 댓글