-
1/17기록 - 프로그래머스 2018 카카오 코테#2Algorithm 2022. 1. 17. 10:35728x90
즐겁게 놀고 난 주말 이후 월요일 아침에 도전해본 2018 카카오 코테 level 1 비밀지도 문제
일단 문제가 엄청나게 길었다.
긴 문제들을 잘 읽어 보면 벽은 #으로 길은 공백으로 표현되고, 이진수로 표현했다가 출력은 String 형태의 #과 공백으로 표현하면 되는거다. 긴 문제에 비해 이해하는 건 매우 쉬웠음.
알고리즘 생각
1. n길이의 answer 배열 선언
2. Integer.toBinaryString()을 이용해서 이진수로 변환
3. arr1과 arr2배열의 합집합으로 최종 지도가 완성되기 때문에 비트 연산자 or(|)를 사용
4. replace(old, new)를 사용해서 old를 new로 변환
5. 맨 앞이 공백인 경우에 대한 표현
이렇게 풀었다. 이 문제에서 toBinaryString(), replace() 메소드도 중요하겠지만, 나는 중간에 if문이 가장 중요하다고 생각한다. 조건 3번에서 이진수로 변환했을 때, n 보다 작게 되는 경우를 놓치게 되면, 앞자리에 공백이 오는 입력 2번을 만족시키지 못하기 때문이다.
앞에 공백이 올 수 있도록, n보다 작은 경우 s.length() 부터 n까지 앞자리에 0을 넣어주도록 프로그램을 짜주어야 입력 2를 만족시킬 수 있다. 이 부분을 간과하여 시간을 많이 소모했다.
문제를 모두 풀고 나서 다른 사람의 풀이를 보는데, String.format()을 사용하여 앞자리 0을 넣어주는 방식이 있었다. 이진수를 포맷화 하여 String으로 바꿔주면서 맨 앞에 0도 자연스럽게 넣어주는 방식이었다. 대 충격...
result[i] = String.format("%" + n + "s", result[i]);
이런식으로 사용했다.
**Integer.toBinaryString() : 10진수를 2진수로 변환
**replace(old, new) : old를 new로 변환
**String.format() : 포맷형식을 사용해서 출력 형식을 만들기
728x90'Algorithm' 카테고리의 다른 글
1/18기록 #2 - 백준 1159 (0) 2022.01.18 1/18기록 #1 - 백준 1075번 (0) 2022.01.18 1/14기록 - 프로그래머스 카카오 코테 #1 (0) 2022.01.14 1/13기록 - 백준 2309 (0) 2022.01.13 1/12기록 - 프로그래머스 문제풀이 #3 (0) 2022.01.12