Code Signal -Arcade
코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당.
주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...
되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요! \
Build Palindrome
회문을 만들어라
주어진 문자열을 회문으로 바꿔주라는 문제입니다.
단, 최대한 짧게 회문을 구성하라고 하네요.
코드를 보겠습니다.
String buildPalindrome(String st) {
StringBuilder stst = new StringBuilder(st).reverse();
System.out.println("stst is .." + stst); // cdcba
StringBuilder newSt = new StringBuilder(st); //abcdc
if(st.equals(stst.toString())){
System.out.println("its same");
return st;
}else if(st.equals(stst.toString()) == false){
StringBuilder bucket = new StringBuilder();
while(true){
stst = stst.reverse();
bucket.append(stst.charAt(0));
stst = stst.deleteCharAt(0);
System.out.println("bucket is .." + bucket);
System.out.println("stst is >>>"+stst);
if(stst.toString().equals(stst.reverse().toString()) == true){
System.out.println("stst equals stst reverse >> "+ stst);
bucket.reverse();
newSt = newSt.append(bucket);
System.out.println("bucket reverse append complete! newSt is>>> "+newSt);
break;
}
}
return newSt.toString();
}
return "something is wrong!!";
}
StringBuilder 를 사용하였습니다.
기본적으로 stringbuilder 와 stringbuffer가 있습니다. 이것들에 대한 자세한 블로그를 첨부합니다.
처음하시는 분들을 위한 자바(Java) 기초강의 - 23 [문자열을 다루는 StringBuilder 클래스, StringBuffer 클래스]
23강) StringBuilder 클래스, StringBuffer 클래스 지난 시간에 String 클래스에 대해서 알아보았습니다. 오늘은 그 String 클래스처럼 문자열을 다루는 "StringBuilder"라는 클래스와 "StringBuffer" 클래스를..
eskeptor.tistory.com
StringBuilder stst = new StringBuilder(st).reverse(); // abcdc
StringBuilder newSt = new StringBuilder(st); //abcdc
if(st.equals(stst.toString())){
System.out.println("its same");
return st;
stringbuilder의 유용한 메서드 reverse를 이용해서 일단 기본 문자열이 이미 회문인지 확인해보는게 좋겠습니다.
두개의 변수에 reverse한 문자열과 원본 문자열을 넣어줍니다.
그리고 그 둘이 equals()한지를 확인해줍니다.
else if(st.equals(stst.toString()) == false){
StringBuilder bucket = new StringBuilder();
while(true){
stst = stst.reverse();
bucket.append(stst.charAt(0));
stst = stst.deleteCharAt(0);
System.out.println("bucket is .." + bucket);
System.out.println("stst is >>>"+stst);
if(stst.toString().equals(stst.reverse().toString()) == true){
System.out.println("stst equals stst reverse >> "+ stst);
bucket.reverse();
newSt = newSt.append(bucket);
System.out.println("bucket reverse append complete! newSt is>>> "+newSt);
break;
}
}
return newSt.toString();
st는 단순 String이고 stst는 stringbuilder로 지정을 햇습니다.
그리고, bucket도 stringbuilder로 지정하여 이제 회문을 찾는 반복문을 생성해야겠습니다.
일단, 조건은 st를 뒤집어봐도 같지 않은 경우입니다.
그 상태로, 이제 stst를 다시 뒤집어줍니다. 왜냐하면 아까 잠깐 비교하는데 썼기 때문에. 뒤집는 것을 해주고, 이제 처음 문자열을 빼고 그 뺀문자는 bucket에 넣어줍니다. 그리고 나서 stst를 다시 정의해주고 비교를 해봅니다.
이 경우 같은 경우 아까 버려둔 bucket의 문자열을 거꾸로 reverse 한 뒤 붙여주면? 가장 짧게 회문을 생성할 수 있습니다.
이제 엘리트 분들의 답안을 감상하자...
JAVA
String buildPalindrome(String s) {
for (int i = 0; i < s.length(); i++) {
if (isPalindrome(s.substring(i))) {
StringBuilder sb = new StringBuilder();
sb.append(s);
for (int j = i - 1; j >= 0; j--) {
sb.append(s.charAt(j));
}
return sb.toString();
}
}
// Guaranteed not to get here
//
return "";
}
boolean isPalindrome(String s) {
// Walk the string from head to tail
// comparing characters at each side as we go
//
int h = 0;
int t = s.length() - 1;
while (h < t) {
if (s.charAt(h) != s.charAt(t)) {
return false;
}
h++;
t--;
}
return true;
}
Python3
def buildPalindrome(st):
for i in range(0,len(st)):
if(st[i:len(st)] == st[i:len(st)][::-1]):
return st[0:i] + st[i:len(st)] + st[0:i][::-1]
JS
function buildPalindrome(st) {
if (isPalindrome(st)) return st;
for (var i = 0; i < st.length; i++) {
if (isPalindrome(st.slice(i, st.length))) {
return st + Array.from(st.slice(0, i)).reverse().join('');
}
}
}
function isPalindrome(string) {
return string == Array.from(string).reverse().join('')
}
공감 ♥ 버튼 눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!
부탁드려요 돈드는거 아니잖아요~
'Algorithm > Java' 카테고리의 다른 글
#46_Code Signal Arcade >> Elections Winners (0) | 2020.05.18 |
---|---|
#44_Code Signal Arcade >> Find Email Domain (0) | 2020.03.19 |
#43_Code Signal Arcade >> Is Beautiful String (0) | 2020.03.10 |