문제 발생
https://school.programmers.co.kr/learn/courses/30/lessons/17681
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
처음 이문제를 풀 때는 숫자를 Integer.toString(num, 2)를 이용하여 이진법으로 바꿨는데 오류가 발생하였다.
왜냐하면 문제에서는 지도의 가로세로길이가 n으로 주어져있는데 만약 n이 5일때 9를 이진법으로 표현하면 "1001"으로 표현되는데 문자열의 길이는 4인데 n이 5이므로 만약 String.charAt(5)를 실행하면 인덱스를 벗어나기 때문에ArrayIndexOutOfBoundsException 이 발생하기떄문이다
문제 해결을 위한 시도
그래서 이진법으로 변환시 만약 문자열이 n이 아니라면 n이 될때까지 문자열의 앞에 "0"+ 문자열 해주었다.
그 후 문제를 해결하였지만 문자열을 다시 charAt을 이용하여 char배열에 저장하고 다시 조건에 맞춰 #, ' ' 으로 바꿔 char배열을 다시 한줄 한줄을 String으로 바꾸는 과정이 복잡한것같아 다른 풀이를 찾아보았다.
문제 해결
문제를 깔끔하게 푸는 방법은 비트연산자를 이용하면 기존의 방법보다 더 깔끔하게 해결할 수 있었다.
비트 연산자중 | 과 & 는 두 정수가 주어졌을 때 두 정수를 비트로 바꾸어 and or연산을 수행한다.
System.out.println(9 | 17);
//01001
//10001
//11001 = 25
System.out.println(9 & 17);
//01001
//10001
//00001 = 1
우리가 각 숫자를 이진법으로 바꾸었던것과 다르게 비트연산은 오른쪽자리부터 연산하기 때문에 이진법 변환시 길이에 대해 걱정할 필요가 없었다.
새롭게 알게 된 점
숫자를 이진법으로 바꾸는 법과 이진법끼리 논리연산시 이진법으로 변환된 두 문자열을 비교하는것 보다 두 정수를 비트연산하는것이 더 코드가 간결하고 편리하다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [TIL]20230707 - 프로그래머스 기지국 설치 [JAVA] (0) | 2023.07.09 |
|---|---|
| [TIL]20230705 - 알고리즘 풀이 프로그래머스 단어 변환 Java 자바 (0) | 2023.07.05 |
| [백준허브]프로그래머스, 백준을 깃허브와 연동하여 푼 문제들 자동으로 커밋하기 (0) | 2023.06.19 |
| LEVEL 1. 성격 유형 검사하기 [JAVA][자바] (0) | 2023.05.12 |
| LEVEL 2. 괄호 회전하기 [JAVA][자바] (0) | 2023.04.27 |