본문 바로가기
코딩 테스트/[Kotlin] 백준

[Kotlin] 백준 1032 명령 프롬프트

by M개발자 2024. 2. 11.
반응형
반응형

명령 프롬프트

 

시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다.

 

dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.

 

이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴에는 알파벳과 "." 그리고 "?"만 넣을 수 있다.

가능하면 ?을 적게 써야 한다. 그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.


예제 입출력

입력 출력
3
config.sys
config.inf
configures
config????

 


풀이 방법

 

입력받은 파일명을 배열에 저장해 각 인덱스에 해당하는 문자끼리 비교하면 물음표가 들어갈 자리를 찾을 수 있지 않을까 ?! 싶어서 도전! 

코드

  • 문자열은 인덱스로 문자에 접근할 수 있다. 
  • 파일 이름의 길이는 모두 같다.

1. 바깥쪽 for문은 파일명의 길이만큼 반복

  • 파일명들의 각 인덱스에 해당하는 문자를 비교를 하기 위해 파일명 길이만큼 반복한다. 

2. flag 

  • 각 인덱스에 해당하는 문자를 비교하면서 문자 일치 여부를 저장한다. 

3. target 

  • 비교할 문자의 기준이 되는 문자로, 파일명들 중 가장 첫번째 파일명의 인덱스에 해당하는 문자를 저장하여 비교한다. 

4. 안쪽 for문은 n만큼 반복 

  • 안쪽 for문은 파일명들을 담은 배열을 순회하는 for문이다. 
  • target에 첫번째로 입력받은 파일명을 담고 있으므로 index 1부터 시작한다. 

5. 기준이 되는 문자와 파일명이 담긴 배열 순회하며 인덱스에 해당하는 문자 비교

  • target과 fileNames[j][i]가 일치하지 않으면 물음표가 들어가야 하므로 flag 값을 false로 바꾸고 for문을 종료한다.

6. flag가 false면 물음표 넣기 

 

 

fun main() = with(System.`in`.bufferedReader()) {
    val n = readLine().toInt()
    val fileNames = mutableListOf<String>()
    var result = ""

    for (i in 0 until n) fileNames.add(readLine()) 
    
    val nameLength = fileNames[0].length

    for (i in 0 until nameLength) { // 1
        var flag = true // 2
        val target = fileNames[0][i] // 3
        for (j in 1 until n) { // 4
            if (target != fileNames[j][i]) { // 5
                flag = false
                break
            }
        }
        result += if (flag) target // 6
        else "?"
    }

    println(result)

}

 

 

브론즈 문제는 풀이가 바로 생각나서 넘 좋다,, ꒰ ⸝⸝ɞ̴̶̷ ·̮ ɞ̴̶̷⸝⸝꒱


 

 

반응형

댓글