본문 바로가기
모바일/Kotlin

[Kotlin] 자바 코드를 코틀린 코드로 자동 변환

by drCode 2021. 4. 11.
728x90
반응형

 

안녕하세요. 이번 포스팅은 자바 소스코드를 코틀린코드로 자동변환하는 것을 다뤄보겠습니다.

 

이 기능은 안드로이드 스튜디오에서 자동으로 지원하는데요,

 

이 안드로이드 스튜디오에서... 자바 코드를 손쉽게 코틀린으로 변환이 가능합니다.

 

그냥 자바 소스코드를 복사, 붙여넣기 하면 되는데요

 

drcode-devblog.tistory.com/109

 

[프로그래머스/java] 이진 변환 반복하기

이번 포스팅은 프로그래머스 Level 2 월간 코드 챌린지 문제인 이진 변환 반복하기 문제를 풀어보겠습니다. 이번 문제는 Level 2 치고 쉬웠습니다. 주어진 문자열에서 0을 제거하고, 0이 제거된 문자

drcode-devblog.tistory.com

이 소스 코드를 코틀린 소스로 변환해보겠습니다.

 

package binaryConvertRepeat;

import java.util.Arrays;

public class BinaryConvertRepeat {
	public static void main(String[] args) {
		Solution s = new Solution();
		System.out.println(Arrays.toString(s.solution("110010101001")));
		System.out.println(Arrays.toString(s.solution("01110")));
		System.out.println(Arrays.toString(s.solution("1111111")));
	}
}

class Solution {
    public int[] solution(String s) {
    	int cnt = 0, zero = 0;
    	
    	while(!s.equals("1")) {
    		int c = s.replaceAll("0", "").length();
    		zero += s.length() - c;
    		s = toBinary(c);
    		cnt++;
    	}
        
        int[] answer = {cnt, zero};
        return answer;
    }
    
    public String toBinary(int c) {
    	String temp = "", rtn = "";
    	
    	while(c > 0) {
    		temp += String.valueOf(c%2);
    		c/=2;
    	}
    	for (int i = temp.length() -1; i >= 0 ; i--) rtn += temp.charAt(i);
    	return rtn;
    }
}

위 소스 코드 전부다를 복사 붙여넣기하면 안됩니다.

 

패키지는 빼고 import 밑으로 복사를 합니다.

 

반응형

 

그러면 다음과 같이 코드가 변환됩니다.

 

import java.util.*

object BinaryConvertRepeat {
    @JvmStatic
    fun main(args: Array<String>) {
        val s = Solution()
        println(Arrays.toString(s.solution("110010101001")))
        println(Arrays.toString(s.solution("01110")))
        println(Arrays.toString(s.solution("1111111")))
    }
}

internal class Solution {
    fun solution(s: String): IntArray {
        var s = s
        var cnt = 0
        var zero = 0
        while (s != "1") {
            val c = s.replace("0".toRegex(), "").length
            zero += s.length - c
            s = toBinary(c)
            cnt++
        }
        return intArrayOf(cnt, zero)
    }

    fun toBinary(c: Int): String {
        var c = c
        var temp = ""
        var rtn = ""
        while (c > 0) {
            temp += (c % 2).toString()
            c /= 2
        }
        for (i in temp.length - 1 downTo 0) rtn += temp[i]
        return rtn
    }
}

음.. 얼추 비슷해졌는데 

 

메인함수가 object화 되어서 실행을 할수가 없게 되었죠

 

메인함수를 밖으로 빼주고, class Solution 앞에 있는 internal을 지워보도록 하겠습니다.

 

import java.util.*

fun main(args: Array<String>) {
    val s = Solution()
    println(Arrays.toString(s.solution("110010101001")))
    println(Arrays.toString(s.solution("01110")))
    println(Arrays.toString(s.solution("1111111")))
}

class Solution {
    fun solution(s: String): IntArray {
        var s = s
        var cnt = 0
        var zero = 0
        while (s != "1") {
            val c = s.replace("0".toRegex(), "").length
            zero += s.length - c
            s = toBinary(c)
            cnt++
        }
        return intArrayOf(cnt, zero)
    }

    fun toBinary(c: Int): String {
        var c = c
        var temp = ""
        var rtn = ""
        while (c > 0) {
            temp += (c % 2).toString()
            c /= 2
        }
        for (i in temp.length - 1 downTo 0) rtn += temp[i]
        return rtn
    }
}

 

이제 실행할 수 있는데요, 

 

실행 결과는 다음과 같습니다.

 

[3, 8]
[3, 3]
[4, 1]

 

728x90
반응형

댓글