프로그래밍언어/알고리즘

알고리즘 5편 특정 문자열 찾기 및 최소거리 탐색 코틀린(kotlin) 으로 시작하는 문제해결방법

by 앵과장 2021. 9. 16. 07:37
반응형

안녕하세요
앵과장입니다.

알고리즘 잘해쳐나가고 있나요?
저도 개발을 이렇게 나이먹고 문제해결방법 하고 있을줄은 몰랐습니다.
아에 못할거라고 생각하고 접근을 안했는데 하니까 됩니다.
갑자기 이런짤이 생각이 나네요

이제는 고인이되신  현대그룹 정주영 회장님입니다.

일단 해보시기 바랍니다.
좀더 일찍해볼껄 그랬네여

문자열 과 문자에대한 부분을 단계적으로 접근하면서 느낀건 아무것도 모르면 기초부터 하나씩 풀어나가는게 필요한것 같습니다.

오늘의문제

문자열 a 에 문자 s를 0으로 변경하고
문자s를 기준으로 1씩 증가되는 문자열을 만들어보세요

문자열 a : "abcdeapplea"
문자 s:  'a'

abcdeapplea
01221012210

이렇게 나와야 정상적인 출력입니다.

음..... 전 아직인가봅니다
어떻게 해야하는거지..



    @Test
    fun 테스트(){
        var b:String = "a"
        var s:Char = b.get(0)
        val a:String = "abcdeapplea"
//문자열을 toCharArray 케릭터 베열로 변경
        val chars = a.toCharArray()
//리턴할 읽기  쓰기 가능한 배열 arraylist랑 비슷한거겠지요?
        var answer = mutableListOf<Int>()
//특정 문자 기준으로 변환되는 임시 tmp변수
        var tmp = 0
        chars.forEachIndexed{index,value->
//케릭터 배열에서 명시한 케릭터와 같다면
            if(value.equals(s)){
//tmp변수는 0
                tmp =0
                answer += listOf(tmp)
            }else{
//그외 케틱터는 tmp를 증가시켜 반환
                tmp++
                answer += listOf(tmp)
            }
        }
        System.out.println(answer)
        //list.asReversed().forEach { println(it) }
        //list.indices.reversed()

//문자열 케릭터 뒤집어 순환
        for(i in chars.indices.reversed()){
//배열 케릭터와 특정케릭터 일치하다면
            if(chars[i].equals(s) ){
//tmp 는0
                tmp=0
            }else{
//그외 케릭터는 tmp증가
                tmp++
//처음 변환한 answer배열에서 현재 들어간 값과 비교하여 작은숫자를 다시 answer에 넣기
                answer[i] = minOf(answer[i],tmp)
            }
        }
        System.out.println(answer)
    }



minOf

Kotlin 에서 minOf(1,2) 를 던지면 그중에 작은값을 반환하는 함수 입니다

maxOf도 있겠져 

직접 만드셔도되고 이런것이 있다라고 아시면 문제해결에 도움이 됩니다. 

 

정리하자면 0번째 index부터 문자열 길이까지 순환하며
조건에 부합하는 값을 찾고
역순으로 순환하며 조건에 맞는 값을 설정할때 반환

배열에 들어간 value값과 역순으로 들어가는 값중에 가장 작은것을 찾아서 넣게됩니다.

이유는 특정케릭터 기준으로 1씩증가되야하는데 1개가이나고 여러개가 들어갈수 있는데 그때마다 기준이 되는 index가 변경되고 다시 해당기준으로 1씩증가되는부분이기 때문에 가장 작은 값으로 맞춰주면 현재 기준에서 최단거리에 해당하는 value에 값을 찾을수 있습니다.

일단 한참걸렸네여 대략 1시간정도 해맨것같습니다.

그래도 문제를 이해하고 코드를 이해했다면 조금씩 좋아질수 있겠져?

#알고리즘 # 문제해결능력 #kotlin #문자열거리 #최소거리

알고리즘 6편 바로가기

 

알고리즘 6편 Hash 로 2개 배열 중복값 찾고 지우기 코틀린(kotlin) 으로 시작하는 문제해결방법

안녕하세요 앵과장입니다. 2021년 그것도 9월이네요 벌써 내나이 40대초반도 지나가고있네요 오늘은 연휴 시작 토요일 입니다. 다들 즐거운 한가위 추석되시고 놀지말고 공부하세요 알고리즘문

angryfullstack.tistory.com