코딩 테스트(JAVA)/인프런 문제풀이

이진수 출력

Lea Hwang 2022. 4. 21. 17:43

10진수 N이 입력되면 2진수로 변환하여 출력하는 프로그램을 작성하세요.

단 재귀 함수를 이용해서 출력해야 합니다.

 

▣ 입력 설명

첫 번째 줄에 10진수 N(1 <=N <=1,000)이 주어집니다.

 

▣ 출력설명

첫 번째 줄에 이진수를 출력하세요.

 

▣ 입력예제

11

 

▣ 출력예제

1011

 


 

진수 변환의 경우 제가 이전에 정리해둔 포스팅이 있습니다. 

재귀 함수가 아닌 메서드를 활용해서 변환하는 방법을 알고 싶으신 분들은 아래 포스팅을 참고하시면 도움이 될 것 같습니다. 

💡 10진수 ↔ 2진수, 8진수, 16진수 변환 방법

 

💡 10진수 ↔ 2진수, 8진수, 16진수 변환 방법

백준 문제를 풀면서 꼭 알고 넘어가야 할 개념이 생겨서 이 글을 포스팅하게 되었습니다. 예제를 통해 이해한 후 이진수 문제로 넘어가서 풀어보는 것도 좋을 것 같습니다. [백준 3460번] 이진수 [

lealea.tistory.com

 

 

이 강에서는 재귀 함수를 통해 이진수 출력을 구현해 볼 텐데요, 저번 포스팅을 잘 이해하셨다면 1분 만에 바로 풀 수 있습니다. 

💡 재귀함수 문제 if ~ else문을 활용하면 거의 풀이할 수 있습니다. 

 

 

입력받은 n이 0이 되면 return 하며, 그전까지는 2로 나눈 나머지를 출력하면 됩니다. 

여기서 출력 함수의 위치에 따라 어떤 결과가 나오는지 같이 알아보도록 하겠습니다. 

public class Conversion {
	public void DFS(int n) {
		if(n == 0) return;
		else {
			// System.out.print(n + " "); 11 5 2 1..몫을 출력
			// System.out.print(n%2+ " "); 1 1 0 1
			DFS(n/2);
			System.out.print(n%2+ " "); // 우리가 원하는 출력 모습 : 1 0 1 1	
		}
	}

	public static void main(String[] args) {
		Conversion T = new Conversion();
		T.DFS(11);
	}

}

저번 포스팅에서 처럼 출력 함수를 재귀 함수 밑에 두었는데요, 이 또한 그림으로 설명하면서 이해해보도록 하겠습니다.

 

 

 

그림에 대한 설명은 저번 포스팅으로 대체하도록 하겠습니다. (완전 일치합니다.)

재귀함수(스택프레임)

 

재귀함수(스택프레임)

재귀 함수 자연수 N이 입력되면 재귀 함수를 이용하여 1부터 N까지를 출력하는 프로그램을 작성하세요. ▣ 입력 설명 첫 번째 줄은 정수 N(3 <=N <=10)이 입력된다. ▣ 출력설명 첫째 줄에 출력한다.

lealea.tistory.com

 

 

이처럼 재귀 함수를 통해 거꾸로 출력받을 수 있구나 정도로 이해하시면서,

중요한 것은

스택 프레임의 동작원리if ~ else문을 활용한 재귀 함수 구현임을 기억하시면 알고리즘을 푸실 때 도움이 되실 것 같습니다.