app.codility.com/programmers/lessons/1-iterations/binary_gap/
binary gap문제를 풀었고, 처음에 33점 받은 코드와 100점 코드를 올리도록 하겠다..
33점 코드를 풀면서 java에서 string을 앞으로 붙이는 방법을 찾았고, 딱히 뭐가 없어서 메소드를 생성했다
JAVA에서 String을 앞으로 붙이는 방법을 찾기위해 오신 분들은 아래로!! -> 메소드 생성으로 해결했으니 다른방식을 찾는 분은,,,bye,,,
우선 이 문제는 Integer.toBinaryString()를 알고있었으면 더 금방 풀 수 있었는데.. 이걸몰라서 직접 만들어주느라 시간이 걸렸다
Integer.toBinaryString() => 숫자를 이진수로 변환해 String으로 바꿔준다.
우선 100점 코드부터!
import java.util.*;
class Solution {
public int solution(int N) {
// write your code in Java SE 8
String str="";
int count=0;
int max=0;
str=Integer.toBinaryString(N);
for(int i=0;i<str.length();i++){
if((str.charAt(i))=='1'){
max=Math.max(max,count);
count=0;
}
else{
count++;
}
}
return max;
}
}
33점 코드
우선 binary로 바꿔주기 위해서 for문을 사용했고,
string append를 앞으로 붙여줘야해서 메소드를 생성했다
여기서 내가 굳이 StringBuilder를 사용한 이유는 codility에서 효율성을 체크한다길래 +대신 append로 사용해줬다
무튼 문자열을 앞으로 바꿔주는 부분은 간단하다
그냥 아래처럼 순서를 바꿔서 append하고 return해줌..
public static String leftAppend(String str, String left){
String result;
StringBuilder sb = new StringBuilder(left);
sb.append(str);
result=sb.toString();
return result;
}
- 여기서 StringBuilder를 사용한 이유는 아래 블로그 참고!
사실 처음에는 StringBuffer를 사용했었는데 아래 블로그처럼 더 빠르다고 해서 StringBuffer를 사용했다.
그러다 StringBuilder로 바꾼 이유는
StringBuffer는 멀티스레드 환경에서도 동기화를 지원하지만
StringBuilder는 동기화를 지원하지 않는다고 한다.
근데 여기서는 멀티스레드 환경이 아니라서 StringBuilderf를 사용하는 것이 더 좋다.
그래서 StringBuilder를 사용하기로 했다!
blog.naver.com/PostView.nhn?blogId=rock1191&logNo=60171599061
이건 33점 코드 - 저 flag는 왜쓴건지 모르겠다..생각해보니 필요가 없어서 다 빼버리고 binary도 toBinaryString() 사용했더니 100점이 나왔다..
이 코드는 내가봐도 너무 더럽다..
import java.util.*;
class Solution {
public static String leftAppend(String str, String left){
String result;
StringBuilder sb = new StringBuilder(left);
sb.append(str);
result=sb.toString();
return result;
}
public int solution(int N) {
// write your code in Java SE 8
String str="";
int num=N;
int temp;
String temp_str;
boolean flag=false;
int count=0;
int max=0;
if(N==1){
return 0;
}
while(num!=1){
num=num/2;
temp=num%2;
temp_str=Integer.toString(temp);
str=leftAppend(str, temp_str);
}
str=leftAppend(str, "1");
System.out.println(str);
for(int i=0;i<str.length();i++){
if((str.charAt(i))=='1'){
if(flag==true){
max=Math.max(max,count);
System.out.println(max);
count=0;
}
flag=true;
}
else{
if(flag==true){
count++;
}
}
}
return max;
}
}
'코테 준비-문제풀기' 카테고리의 다른 글
프로그래머스 - 완전탐색 소수찾기 JAVA 자바 (0) | 2020.10.19 |
---|---|
프로그래머스-네트워크 JAVA DFS/BFS (0) | 2020.09.27 |
프로그래머스 - 해시/ 전화번호 목록 JAVA (0) | 2020.09.12 |
프로그래머스 - 프린터 c++ (1) | 2020.07.29 |
계단 오르기 문제 - 재귀함수 사용 (0) | 2020.07.29 |