요르딩딩

프로그래머스 : [1차]비밀지도 (2진수, 비트연산) 본문

[코딩테스트]/문제풀이

프로그래머스 : [1차]비밀지도 (2진수, 비트연산)

요르딩딩 2022. 5. 3. 11:59
728x90
반응형

이번문제는 난이도가 1인 문제라 쉬운 문제였다. 다만 다 풀고난 후 다른사람들의 풀이를 보니 효과적으로 푸신 분들이 많아

정리하려고 한다.

 

내가 푼 방식의 포인트를 정리해보자.

1. 각 배열을 2진수로 표현하기

2. 모두 공백인 경우만 공백으로 간주하기

 

이렇게 두가지 포인트를 나는 직접 구현했지만, 몇몇 함수를 적용하면 효율적이면서 간단하게 구현할 수 있었다.

1. result[i] = Integer.toBinaryString(arr1[i] | arr2[i]);

   이진수로 변환하여, 비트연산을 이용해 계산한다.

 

역시 문제를 다 풀었더라도 나보다 잘 푸신분들의 풀이를 참고하면, 배울점이 많이 있는것 같다.

앞으로도 쉬운문제일지라도 곱씹어 보는 시간을 가져보자

 

[내가 구현한 코드]

class Solution {
	public String[] solution(int n, int[] arr1, int[] arr2) {
		String[] answer = new String[n];

		int[][] map1 = new int[n][n];
		int[][] map2 = new int[n][n];

		for (int i = 0; i < n; i++) {
			int num = arr1[i];
			int tmpN = n - 1;

			while (num != 0) {
				map1[i][tmpN--] = num % 2;
				num = num / 2;
			}
		}

		for (int i = 0; i < n; i++) {
			int num = arr2[i];
			int tmpN = n - 1;

			while (num != 0) {
				map2[i][tmpN--] = num % 2;
				num = num / 2;
			}
		}

		String s = "";
		for (int i = 0; i < n; i++) {
			s = "";
			for (int j = 0; j < n; j++) {
				if (map1[i][j] == 0 && map2[i][j] == 0) {
					s += " ";
				} else {
					s += "#";
				}
			}
			answer[i] = s;
		}

		return answer;
	}
}

 

[다른사람이 구현한 코드]

class Solution {
	public String[] solution(int n, int[] arr1, int[] arr2) {
		String[] result = new String[n];

		String a = Integer.toBinaryString(arr1[0]);

		for (int i = 0; i < n; i++) {
			result[i] = Integer.toBinaryString(arr1[i] | arr2[i]);
		}

		for (int i = 0; i < n; i++) {
//	            result[i] = String.format("%" + n + "s", result[i]);
			result[i] = result[i].replaceAll("1", "#");
			result[i] = result[i].replaceAll("0", " ");
		}

		return result;
	}
}
728x90
반응형
Comments