본문 바로가기

Coding Test

Java 코딩테스트 연습 9일차 (프로그래머스 스쿨 Lv.0, 1100점)

편지

 

 

 

 

쉬운 문제다. 문자열의 길이에 *2만 하면 될 것 같다.

 

 

 

 

자릿수 더하기

 

 

 

 

조금 까다로운 문제다. 문자열로 변환해 charAt 메소드로 추출한 후, 다시 정수형으로 변환해 answer에 더하는 방식으로 풀어 봤다.

 

 

 

 

안 된다. 이것이 자바다 교재에 char 타입은 변환법이 없길래 일단 String처럼 변환시켜 봤는데 역시 안 되나 보다.

 

 

 

 

그래서 방법을 바꿔 지수로 풀어 봤다. 10의 지수 승으로 나눠서 가장 큰 자릿수를 answer의 더한 뒤, 다시 10의 지수 승으로 곱해 n에서 빼 준다. 예를 들어 n이 34,567이라면 10,000으로 나눠 나온 3을 answer에 더한 뒤, 다시 10,000을 곱해 나온 30,000을 34,567에서 빼 주는 방식이다. 4,567이 남으면 같은 방법으로 1의 자리만 남을 때까지 반복한다.

 

이것도 방법을 안 배워서 흔히 쓰는 기호인 ^를 써 봤는데 안 된다. 전혀 다른 값이 나온다.

 

 

 

 

결국 수학 클래스를 찾아 해결했다. 내가 공부하고 있는 페이지보다 한참 뒤쪽에 있다. 이것이 자바다는 활용할 만한 유용한 것들이 너무 뒤에 나오는 경향이 있다ㅠㅠ

 

기본 타입이 double이라 오류가 나길래 (int)로 강제 타입 변환을 해 줬다.

 

 

 

 

 

다른 풀이

 

 

10으로 나눈 나머지를 이용해 1의 자리부터 구해 더한 풀이다. 내 풀이와 달리 따로 Method를 쓰지 않아도 돼서 훨씬 좋은 풀이라고 생각한다. 그런데 생각이 전혀 안 났다. answer에 1의 자리를 더한 후, n을 10씩 나눠 1의 자리를 삭제해 주는 것 역시 창의적인 방법이다.

 

 

모음 제거

 

 

 

 

문자열에서 모음만 전부 제거해야 하는 문제다. charAt으로 모음이 아닌 것만 answer에 더하기로 했다.

 

 

 

 

귀차니즘이 발동해 &를 4개씩이나 쓰면서 퉁 쳐 보려 했다..... 될 리가 없다.

 

 

 

 

switch 조건문을 이용해 해결했다.

 

 

 

 

혹시 원하는 문자열만 빼기가 가능한지 궁금해서 실험해 봤다. 당연히 어림도 없다.

 

 

다른 풀이

 

 

replaceAll과 정규 표현식을 이용해 내가 원했던 것처럼 풀 수가 있다. 둘 다 안 배웠으나 지금 배웠으니 기억해 둬야겠다.

 

 

숨어있는 숫자의 덧셈 (1)

 

 

 

 

정답률이 높은 문제지만 나에게는 많이 까다로운 문제였다.

 

 

 

 

charAt 메소드로 숫자만 찾아서 answer에 j를 더하는 식으로 해 봤다. 이게 될 것 같은데 안 된다.

 

 

 

 

"j"로 해 봐도 안 된다.

 

 

 

 

j로 해 봐도 안 된다.

 

 

 

 

아스키 코드로 해야 되는 건가 싶어서 해 봤는데 여전히 안 된다.

 

 

 

 

내가 제일 싫어하는 방식이지만, 오늘 배운 replaceAll과 정규 표현식을 활용해 볼 겸 a부터 Z까지 다 적어서 없애 봤는데 일부만 성공하고 안 된다. 왜 런타임 에러가 나는지 모르겠다. 알고 보니 a-z와 같은 식으로 하면 된다. 역시 배우지 않으면 몸이 고생한다.

 

 

 

 

역시 오늘 배운 수학 클래스의 제곱 method와 콜라보레이션을 시도해 봤는데 여전히 런타임 에러가 뜬다. 이유를 알 수가 없다.

 

 

 

 

결국 아스키 코드를 다시 찾아서 풀었다. 아까 잘못 찾아봤던 것이다. 1~9는 49~57였다.

 

 

다른 풀이

 

 

Character 클래스의 digit 메소드를 이용해 풀 수 있는 모양이다. Character, digit 단어만 봐도 나에게 많이 필요할 만한 것들이다. char타입 처리, 숫자 추출 부분이 생각보다 잘 안 된다.

 

 

문자열안에 문자열

 

 

 

 

간만에 참 쉬운 문제다. contains 메소드를 쓰면 된다. indexOf 메소드를 써도 된다.

 

 

 

 

다른 풀이

 

 

삼항 연산자를 잊고 있었다. 또 써 볼 좋은 기회였는데 아쉽다. 식이 복잡해지면 가독성이 떨어진다는 문제가 있지만, 확실히 간결한 게 내 스타일이다.

 

오늘은 드디어 1,100점을 달성했다. 2,000점을 향해 계속 달려야겠다.