본문 바로가기
컴퓨터공학/자료구조&알고리즘

String.format("%%%ds*\n", (i * 4) + 3), "") 코드 해석

by hobbiz 2021. 4. 17.
반응형

Do it 자료구조와 함께 배우는 알고리즘 자바편 공부중

아래 코드가 생소해서 검색해보았다

 

String.format("%%%ds*\n", (i * 4) + 3), "");

 

String.format은 알고있었지만 %%% 이렇게 %가 세개가 있는 코드는 처음봤다.

검색해보니 %%가 format함수 안에서는 %로 인식된다고 한다.

 

만약 위에서 i가 2라면 i*4+3은 11이다.

%%%ds*\n 에서

먼저 %d에 우측에서 계산한 결과값을 넣으면

String.format("%%11s*\n, ""); 가 된다

논리적으로는 %11s*\n 와 같아진다.

 

즉 아무 글자도 없는 String인 ""를

11글자의 넓이에 맞춰서 형식을 맞춰준 후 

*을 하나 찍어주고 엔터를 친다.

 

결과적으로 아래와 같은 모양으로 현재 위치를 *로 찍어주게된다

   |   0   1   2   3   4
---+----------------------
   |   *
  0|   2   4   6   8   9
   |
   |       *
  1|   2   4   6   8   9
   |
   |           *
  2|   2   4   6   8   9
   |
   |               *
  3|   2   4   6   8   9
   |
8은 x[3]에 있습니다.

 

해당 소스코드

package chap03;
import java.util.Scanner;
// 선형 검색 (검색과정을 자세히 나타냄)

class SeqSearchEx_03_02 {
	// 배열 a의 앞쪽 n개 요소에서 key와 같은 요소를 선형 검색 (보초법)
	static int seqSearchEx(int[] a, int n, int key) {
		System.out.print("   |");
		for (int k = 0; k < n; k++)
			System.out.printf("%4d", k);
		System.out.println();

		System.out.print("---+");
		for (int k = 0; k < 4 * n + 2; k++)
			System.out.print("-");
		System.out.println();

		for (int i = 0; i < n; i++) {
			System.out.print("   |");
			System.out.printf(String.format("%%%ds*\n", (i * 4) + 3), "");
			System.out.printf("%3d|", i);
			for (int k = 0; k < n; k++)
				System.out.printf("%4d", a[k]);
			System.out.println("\n   |");
			if (a[i] == key)
				return i; // 검색성공
		}
		return -1; // 검색실패
	}

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);

		System.out.print("요솟수:");
		int num = stdIn.nextInt();
		int[] x = new int[num]; // 요솟수 num인 배열

		for (int i = 0; i < num; i++) {
			System.out.print("x[" + i + "]:");
			x[i] = stdIn.nextInt();
		}

		System.out.print("찾는 값:"); // 키 값을 입력 받음
		int ky = stdIn.nextInt();

		int idx = seqSearchEx(x, num, ky); // 배열 x에서 값이 ky인 요소를 검색

		if (idx == -1)
			System.out.println("그 값의 요소가 없습니다.");
		else
			System.out.println(ky + "은 " + "x[" + idx + "]에 있습니다.");
	}
}

 

 

* 참고

what does %%s and %%ds mean with `format` function? : emacs (reddit.com)

반응형

댓글