문제
https://school.programmers.co.kr/learn/courses/30/lessons/17681
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 이해 && 풀이
문제의 이해자체는 굉장히 쉽다. 각 배열에 담긴 숫자들을 이진수를 만들어준다음 1이 있다면 "#" 이 있다고 생각하고 0이라면 길이다. 라고 보면 되는것이다. 문제에서는 한 문제당 2개의 배열을 정해주고 각 배열에 의해 만들어진 맵을 겹치는 것이다. 그리고 겹쳐져 만들어진 맵을 한개의 배열로 나타내는것이 문제였다.
1번 풀이
각각의 숫자를 모두 이진법으로 만들고 두개의 배열에서 각 인덱스의 해당하는 이진법의 숫자중 1이 겹치는 곳을 둘다 없는 곳을 공백으로 두면 된다. 하지만 나는 이는 굳이 일을 번거롭게 한다고 생각하고 한번에 진행하는것이 좋다고 생각했다
2번 풀이
그래서 애초에 진행을 할때 각 숫자를 이진법으로 나누는 로직을 짜고 그때그때 비교해서 넣었다. 그러면 굳이 이진법으로 바꾼 숫자들을 어딘가에 넣지 않아도 된다고 생각했다.
하지만 여기서 문제가 생겼는데 바로 문자열 저장이다. 문자를 저장할때 앞에서 뒤로 차곡차곡 넣는데 이진법은 그와는 반대이기 때문에 살짝 골치가 아팠다. 그래서 StringBuffer를 사용해서 내가 원하는 곳에 넣기 위해 insert() 메소드를 사용하여 원하는 장소에 문자를 넣었다.
이렇게 넣어서 만들어 주었다 만들어진 문자는 toString을 통해 다시 answer i 번째 배열에 넣어주면서 순서가 맞는 문자가 되었다.
3번 풀이
tobinaryString을 사용하는 방법이다. 원하는 숫자를 toBinaryString 을 통해 이진법으로 만들어준다. 그후에 비트연산자를 통해 비교를 해서 각 배열의 인덱스에 겹치는 숫자를 가져오는 비트연산자 " | "를 사용하여 한개의 숫자를 만들어주고 그 숫자를 1이 있다면 "#" 없다면 " "을 사용하는 방법이다.
굉장히 이해하기 쉬운 코드가 되었다. 여기서 while문이 중요한데 이런식으로 값을 주게 되면 가장 앞의 공백을 포함하지 않는다. 그래서 n자리수가 될때까지 앞에 공백을 추가해주는 것이다.
'코딩테스트 > 🧮 프로그래머스' 카테고리의 다른 글
🧮 [프로그래머스] 폰켓몬 (JAVA) (0) | 2023.08.14 |
---|---|
🧮 [프로그래머스] 푸드파이트 대회(JAVA) (0) | 2023.08.12 |
🧮 [프로그래머스] 예산(JAVA) (0) | 2023.08.06 |
🧮 [프로그래머스] 같은 숫자는 싫어(JAVA) (0) | 2023.08.06 |
🧮 [프로그래머스] 공원 산책 (0) | 2023.08.04 |