-
프로그래머스 - Lv1. 비밀지도PS 2022. 3. 4. 12:54
문제 : 비밀지도
- 문제 내용은 여기.
- 쉽게 말해, 두 개의 숫자 입력값을 각각 이진수로 전환하고, 이진수의 1을 #으로 치환한 뒤 결과물을 합치면 된다.
풀이
static int N; public String[] solution(int n, int[] arr1, int[] arr2) { N = n; // String[] wall1 = intToWall(arr1); // String[] wall2 = intToWall(arr2); // return combineWall(wall1, wall2); return intToWall2(arr1, arr2); } private static String[] intToWall2(int[] arr1, int[] arr2) { String[] wallArr = new String[N]; for (int i = 0; i < N; i += 1) { wallArr[i] = String.format("%" + N + "s", Integer.toBinaryString(arr1[i] | arr2[i])) .replace("1", "#") .replace("0", " "); } return wallArr; } private static String[] intToWall(int[] arr) { String[] wallArr = new String[N]; for (int i = 0; i < N; i += 1) wallArr[i] = String.format("%" + N + "s", Integer.toBinaryString(arr[i])) .replace("1", "#") .replace("0", " "); return wallArr; } private static String[] combineWall(String[] a1, String[] a2) { for (int i = 0; i < N; i += 1) { if (a1[i].equals(a2[i])) continue; for (int j = 0; j < N; j += 1) if (a1[i].charAt(j) == ' ' && a2[i].charAt(j) == '#') a1[i] = new StringBuilder(a1[i]).replace(j, j + 1, "#").toString(); } return a1; }
- 두 가지 방법으로 풀었다. 후기 참조.
후기
1 ) 첫번째 방식(
intToWall(), combineWall()
)은 비트연산을 쓰기 싫어서(지나고 나서 보니 왜인가 싶지만 이미 코테를 4문제 정도 푼 뒤였기 때문에 제정신이 아니었다) 안 쓰고 풀어본 방식이다. 나쁘지 않게 작성한 것 같다.
2 ) 두번째 방식(intToWall2()
)은 비트연산자|
(or)를 통해 평범하게 풀었다.'PS' 카테고리의 다른 글
모각코 내부스터디 PS / 백준 1449번 - 수리공 항승 (2) 2022.05.13 프로그래머스 - Lv2. 오픈채팅방 (0) 2022.03.10 프로그래머스 - Lv1. 다트 게임 (0) 2022.03.04 프로그래머스 - Lv1. 2016년 (0) 2022.03.02 프로그래머스 - Lv1. 예산 (0) 2022.03.01 프로그래머스 - Lv1. 신고 결과 받기 (0) 2022.02.28