본문 바로가기
프로그래밍언어/알고리즘

알고리즘 2편 문장(문자열) 과 단어 코틀린(kotlin) 으로 시작하는 문제해결방법

by by 앵과장 2021. 9. 13.
반응형

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

이거 굳이 -0- 이런 말 안 해도 되는데 일단 제가 하는 게 항상 최선에 방식도 아니고 더 좋은 개발 방법이나 잘하시는 분들이 있을 겁니다.
저도 10년 차 이상 개발자이지만 이런 거 해본 적도 없는 안타까운 직장인이라 공부한다는 접근이니 소스에서 좀 더 좋은 방법이 있다면
댓글로 추가해주시면 저도 공부하면서 많은 도움이 될 것 같습니다.


모든 문제풀이는 kotlin으로 진행하겠습니다.
Java 만 하다 보니 좀 다른 언어로 진행해보고 싶었고 앞으로 kotlin으로 개발을 해보고 싶다는 생각도 들어서 알고리즘부터라도 진행해보도록 하겠습니다.

문장(문자열) 과 단어

오늘은 문장 과 단어를 처리하는 문제를 풀어보도록 하겠습니다.

문장 그리고 단어
단어들이 여러 개 있는 형태를 문장(문자열) 그리고 그 문장에 한 단어씩 들어있는걸 단어라고 합니다.

저는 이런 질문에 대한 말도 이해가 잘 안 가더라고요

오늘의 문제


문장에서 가장 긴 단어를 출력해보세요.
가장 긴 단어가 여러 개라면 가장 첫 번째 담긴 단어를 반환해주세요

문장에는 영어 알파뱃으로 이루어지며 문장 속 단어는 공백으로 구분됩니다.

"Im going out of the company today"


개발을 오래 하다 보니 참
안 좋은 습관이라는 것이 너무 생각이 많아진다는 겁니다.
이렇게 까지 해야 될까요? 지금까지 해왔던 수많은 들은 것들이 뭘 써야 하는지는 알지만 굳이 여기서 이런 걸...이라는 생각을
개발하고 나서 알았습니다.

  @Test
    fun 테스트(){
        var a:String = "Im going out of the company today";
        var answer = "";
        var queue: Queue<String> = LinkedList<String>()
        var strArray = a.split(" ")
        var bigStrLength:Int = 0
        for (item in strArray) {
            if(item.length > bigStrLength){
                bigStrLength = item.length;
            }
        }
        for (item in strArray) {
         if(item.length == bigStrLength){
             queue.add(item)
         }
        }

        if(queue.isNotEmpty()){
            answer = queue.elementAt(0)
        }

        System.out.println(answer)
    }

몇 번 풀다 보면 아하라는 생각이 옵니다.
지금 현재 난이도가 1,2,3이라면 1이라는 등급으로 진행이 되고
문제 해결에서 가장 중요한 포인트는 문자를 처리하는 방법과 버퍼라는 곳에 초점이 맞춰져 있는 것 같다고 말입니다.

아마 처음 풀다 보면 생각만큼 바로 풀리지 않을 수 있습니다.
저도 이런 형태 문제를 풀어본 적이 거의 없다 보니 오래 걸렸는데 kotlin으로 하다 보니 syntax를 찾아가는 과정도 존재하였습니다.

역시 새로운 것을 하는 것은 두려움보다는 재미가 먼저 느껴지네요
그래서 저의 이상형이 처음 본 여자인가 봅니다. +_+

다시 소스로 돌아와서 담백하게 바꿔볼까요?
불필요한 것들은 지우고 문제에 필요한 부분만 담아보도록 하겠습니다.

 fun solution(a: String): String {
        var answer = ""
        var temp: String
        var pointer = 0 
        do {
            var next = a.indexOf(" ", pointer) 
            temp = if (-1 < next) {
                a.substring(pointer, next)
            } else {
                a.substring(pointer)
            } 
            if (answer.length < temp.length) {
                answer = temp
            } 
            pointer = next +1; 
        } while (-1 < next) 
        return answer
    }

자 아까보다 문제에서 필요한 부분만 담으려고 노력하였습니다.

처음에는 그냥 생각나는 대로 문제를 풀어보고 그다음에는 내가 지금까지 해왔던 것들에서 불필요한 부분들을 제거해나가는 과정으로 접근해보시기 바랍니다.

오늘도 좋은 하루 되시고
좋은 회사 취직할 수 있도록 파이팅하세요

단계별 알고리즘이 궁금하다면 다음을 클릭해주세요

https://angryfullstack.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-3%ED%8E%B8-%EB%AC%B8%EC%A0%9C%ED%95%B4%EA%B2%B0%EB%8A%A5%EB%A0%A5-Char-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%92%A4%EC%A7%91%EA%B8%B0-%ED%95%9C%ED%8C%90-%EC%BD%94%ED%8B%80%EB%A6%B0kotlin-%EC%9C%BC%EB%A1%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-%EB%AC%B8%EC%A0%9C%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95

 

알고리즘 3편 Char 문자열 뒤집기 한판 코틀린(kotlin) 으로 시작하는 문제해결방법

안녕하세요 앵과장입니다. 모든 문제풀이는 kotlin 으로 진행하겠습니다. Java 만 하다보니 좀 다른언어로 진행해보고싶었고 앞으로 kotlin으로 개발을 해보고싶다는 생각도 들어서 알고리즘부터라

angryfullstack.tistory.com