Code Signal -Arcade
코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당.
주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...
되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요! \
LineEncoding
줄 인코딩
주어진 문자열에 알파벳이 있다.
이러한 알파벳들의 각 해당 문자의 수를 세서 앞에 붙여주고 다른 문자도 같은 작업을 해달라는 문제이다.
답안을 보겟습니다.
String lineEncoding(String s) {
//맨 뒷 문자는 아무거나 하나 붙여준다. 반복문에서 인덱스 값을 겹치지 않게 하기 위함이다.
s += "#";
System.out.println(s);
// 최초 카운트 수는 1로 선언해준다.
int cnt = 1;
// 리턴값을 넣을 결과값을 stringbuilder를 이용해서 append()를 사용할 수 있게 해준다.
StringBuilder result = new StringBuilder();
for (int i = 1; i < s.length(); i++) {
if (s.charAt(i) == s.charAt(i - 1)) {
//앞문자와 뒷문자가 같다면 cnt+1을 한다.
cnt++;
} else {
//같지 않다면, 새로운 문자의 등장이므로, 카운트된 것을 완료해주고 새로운 작업을 시작하는 프로세스를 가진다.
if (cnt > 1) {
// 카운트가 1보다 큰경우 카운트 하던 문자가 아닌 새로운 문자가 등장한것이므로 cnt를 숫자를 붙여주고 패스.
result.append(cnt);
System.out.println("cnt add...result = "+result);
}
//카운트 숫자를 붙인는 행위 외에는 새로운 문자의 등장 말고, 바로그 직전의 카운트 완료된 문자를 붙여준다.
result.append(s.charAt(i-1));
System.out.println("char add...result = "+result);
//작업이 완료되었으니, 다시 카운트는 1로 리셋 해주어서 새로운 문자의 카운트를 시작한다.
System.out.println("cnt reset!!");
cnt=1;
}
}
//stringbuilder였던 result를 문자열로 형변환한뒤 리턴한다.
return result.toString();
}
기본적인 원리는 앞문자와 뒷문자를 같은지 확인하고 같으면 카운트를 하고 다르면 카운트를 끝내고 charAt(i-1)의 문자를 추가해주는 것입니다.
이제 엘리트 분들의 답안을 감상하자...
JAVA
String lineEncoding(String s) {
Matcher m = Pattern.compile("([a-z])\\1*").matcher(s);
String result = "";
while(m.find()){
int len = m.group(0).length();
char cha = m.group(0).charAt(0);
result += (len==1?"":len) + "" + cha;
}
return result;
}
정규식을 통한 해결방법입니다.
Python3
from itertools import groupby
def lineEncoding(s):
x = ''
for k,g in groupby(s):
y = len((list(g)))
if y==1:
x += k
else:
x += str(y) + k
return x
itertools 에서 groupby()함수를 활용한 풀이법이네요.
Groupby는 list에 활용하는 함수로 보이는데, 특이하네요. 한번 저도 해봐야 알것같습니다. 대충,, 문자열 길이를 통해 문자와 숫자를 + 하여 푸는 풀이법 같습니다.
JS
lineEncoding = s =>
s.replace(
/(.)\1*/g,
(e,i) => i==e ? i : e.length+i
)
가장 간단한 js 의 풀이법입니다. replace를 통해, 정규식인가요.. 잘 모르겠네요.ㅋㅋ
공감 버튼♥ 눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!
부탁드려요 돈드는거 아니잖아요~
'Algorithm > Java' 카테고리의 다른 글
#50_Code Signal Arcade >> Chess Knight (0) | 2020.06.28 |
---|---|
#48_Code Signal Arcade >> is Digit (0) | 2020.06.10 |
#47_Code Signal Arcade >> Is MAC 48 Address? (0) | 2020.06.09 |