상세 컨텐츠

본문 제목

이진 변환 반복하기(2레벨)

코딩테스트

by dofury 2023. 1. 14. 23:19

본문

728x90

import java.util.*

class Solution {
    fun solution(s: String): IntArray {
        var texts = ""
        var repeatText = s
        val stack = Stack<Int>()
        var length = 0
        var zeroCount = 0
        var loopCount = 0
        while(repeatText != "1")
        {
            loopCount++
            for(item in repeatText)
            {
                if(item == '1')
                    texts += item
                else
                    zeroCount++
            }
            if(texts == "1")
                break
            length = texts.length
            
            //print("text = $texts ")
            //print("length = $length ")
            
            texts = ""
            print("beforelength = $length ")
            do
            {
                stack.push(length % 2)
                if(length / 2 == 1)
                    stack.push(1)
                length /= 2
            }while(length!=1)
            
            print("afterlength = $length ")
            while(stack.size != 0)
            {
                texts += stack.pop().toString()
            }
            repeatText = texts
            texts = ""
            //print("stack.size = ${stack.size} ")
            //print("text = $texts ")
        }
        print("loopCount:$loopCount, zeroCount:$zeroCount")
        
        var answer = intArrayOf(loopCount,zeroCount)
        
        return answer
    }
}

2번째 문제를 풀지만 코틀린 문법에 많이 미숙한 것 같다.

따로 문법 공부를 해야겠다고 생각했다.

 

외부 반복문에서 1이 아니라면 계속 반복 한다.(반복한다면 이 때 반복카운트를 증가시킴)
 내부에서는 1일 때 추가를 하고 0일떄는 제로카운트를 증가시킨다.
그다음 스택을 활용하여 1의 길이를 이진법으로 변환한다. 
이를 외부 반복문으로 다시 돌아가 조건을 확인 후 반복한다.

 

728x90

'코딩테스트' 카테고리의 다른 글

N개의 최소공배수(2레벨)  (0) 2023.01.15
카펫(2레벨)  (0) 2023.01.15
피보나치 수(2레벨)  (0) 2023.01.15
JadenCase 문자열 만들기(레벨 2)  (0) 2023.01.14
프로그래머스 깃허브 주소  (0) 2022.11.28

관련글 더보기

댓글 영역