목록Java Note/Algorithmus (48)
럿고의 개발 노트
[프로그래머스] 코딩테스트 연습 약수의 합 간략한 문제 풀이 for문과 Stream으로 양쪽에서 풀어봤는데, 예전에 풀었던 두 숫자 사이의 합문제와 동일하게 stream이 효율성에서 더 낮게 나왔다.. for문 효율성 stream 효율성 크게 어려운 점은 없었으니, 따로 추가할 내용은 없을 듯 하다. github 문제 및 풀이 문제 설명 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 사항 n은 0 이상 3000이하인 정수입니다. 입출력 예 n return 12 28 5 6 입출력 예 설명 입출력 예 #1 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다. 입출력 예 #2 5의 약수는 1, 5입니다. 이를 모두 더하면 ..
[프로그래머스] 코딩테스트 연습 문자열을 정수로 바꾸기 간략한 문제 풀이 어렵지 않았지만, 저는 메소드를 이용하여 풀었습니다. 사실, 메소드로 풀수 있던 이유는 제한조건에서 부호와 숫자로만 이루어져 있고 0으로 시작하지 않는다는 조건이 있었기 때문에 가능했습니다. 그냥 parse~()에 대한 메소드를 이해할 수 있는 문제였던 것 같습니다. Integer뿐만아니라, Double, Byte, 등등 모든 타입에 존재합니다. 또한 static 함수로써 import를 하지 않아도 사용할 수 있습니다. Github 문제 및 풀이 문제 설명 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한 조건 s의 길이는 1 이상 5이하입니다. s의 맨앞에는 부호(+, -)가 올 수 있습니다. ..
[프로그래머스] 코딩테스트 연습 시저 암호 간략한 문제 풀이 Level01중에서는 난이도가 조금 있던 문제였던것 같습니다. 처음에 너무 하드코딩으로 풀어서, 최대한 코드 간략화를 시켰습니다. 처음에는 소문자 배열과 대문자 배열을 모두 생성했지만, 아래 메소드를 이용하여 대문자 배열로만 코드를 줄였습니다.(그러다 보니 중복 코딩이 사라졌습니다.) 이번 문제를 풀면서 조금만 더 생각을 하면, 코드를 하나씩 지워나갈수 있다는 걸 알게 되었습니다. 역시 문자열 연산을 하는 문제는 String을 쓰면 효율성이 너무 떨어지네요. StringBuffer나, StringBuilder를 쓰기를 권장합니다. 이번에는 새로운 메소드들이 많이 나왔는데요. Arrays.binarySearch() Java API 설명 쉽게 생각..
[프로그래머스] 코딩테스트 연습 수박수박수박수박수박수? 간략한 문제 풀이 어렵지 않았던 문제입니다. Level1를 많이 풀다보니, 이런 문제는 이제는 많이 익숙해진 것 같습니다. 문자열 연산에서는 String보다는 StringBuffer를 사용하는 것이 효율적으로 훨씬 더 좋기 때문에 최대한 StringBuffer를 사용하려고 노력하고 있습니다. 수학적인 알고리즘으로 접근해서 풀었던 다른 사람의 풀이가 있기 때문에, 그걸 추가하겠습니다, new String(new char [n/2+1]).replace("\0", "수박").substring(0,n); replace()는 특정문자열을 찾아 다른 문자열로 변경하는 것이며, substring()은 문자열을 자르는 메서드입니다. 문자(Character)의 기본..
[프로그래머스] 코딩테스트 연습 소수 찾기 간략한 문제 풀이 소수찾기는 알고리즘 문제중 기본적인 문제입니다. 사실, 반복문을 사용하여 하나씩 계산을 해서 풀수 있지만, 소수 찾기의 가장 큰 문제점은 효율성 문제이겠죠. 얼마나 반복을 하지 않는가를 보는 문제 중 대표적인 문제인 것 같습니다. 약수는 자기자신의 루트값 이하의 값만 약수를 가지게 될것 입니다. 따라서 최소한의 반복을 하기 위해서 Math.sqrt()메소드를 사용하여 루트값을 구하였습니다. 또한 짝수 중 2를 제외한 나머지 값들은 모두 소수가 될 수 없습니다. 따라서 맨 처음부터 짝수가 들어온다면 바로 빼버렸습니다. 지금생각해보니, 어차피 3부터 줄려면 i값을 +2씩 증감식을 만들었어도 좋았겠네요. 따라서 하다보니 변경하였습니다. 증감식을 1씩..
[프로그래머스] 코딩테스트 연습 문자열 내 p와 y의 개수 간략한 문제 풀이 대문자와 소문자 두개다 같은지를 봐야 하지만, String 클래스 메소드 중 toUpperCase()나, toLowerCase가 있기 때문에, 조건을 하나로 줄일 수 있는 것이 이 문제의 핵심인 듯 하다. for문으로 문제를 풀때 stream으로 간단히 풀수 없을지를 고민을 해야 되겠다. 다른 사람 풀이를 보고 대단하다는 생각이 들었다 ㅎㅎ s.chars().filter( e -> 'P'== e).count() == s.chars().filter( e -> 'Y'== e).count(); Github 문제 및 풀이 문제 설명 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'..
[프로그래머스] 코딩테스트 연습 서울에서 김서방 찾기 간략한 문제 풀이 전혀 어렵지 않는 문제였다. 다른 사람 풀이에서 괜찮은 코드를 찾아서 그것만 추가하려고 합니다. Arrays.asList(seoul).indexOf("Kim"); indexOf를 가장 먼저 생각했는데, 배열에서는 그 메소드가 없다는 걸 생각하고 나서 그냥 For문으로 돌렸습니다 ㅎㅎ Github 문제 및 풀이 문제 설명 String형 배열 seoul의 element중 Kim의 위치 x를 찾아, 김서방은 x에 있다는 String을 반환하는 함수, solution을 완성하세요. seoul에 Kim은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다. 제한 사항 seoul은 길이 1 이상, 1000 이하인 배열입니다. seoul..
[프로그래머스] 코딩테스트 연습 문자열 다루기 기본 간략한 문제 풀이 문자열 다루기 기본인데, 예외처리를 배웠다 ㅋㅋ 간단하지만, 예외처리가 어렵기도 했는데, 쉽게 풀어 나간것 같다. 여기서의 오류인 NumberFormatException에 대해서만 설명하면 될듯 하다. 숫자 형식 오류로, 숫자형이 아닌 다른 값이 숫자로 변환하려고 할때 많이 발생 github 문제 및 풀이 문제 설명 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1 이상, 길이 8 이하인 문자열입니다. 입출력 예 s return a234 false 1234 true..
[프로그래머스] 코딩테스트 연습 문자열 내림차순으로 배치하기 간략한 문제 풀이 오름차순 정렬은 쉽게 할 수 있지만, 내림차순은 따로 메소드를 많이 지원하지 않는것 같다. 이 문제는 풀면서 정렬한 후, reverse 메소드를 이용하여, 문자열을 반대로 했다. reverse 메소드를 처음 써봤는데, 새로운 메소드를 배운 것 같아 좋다 ㅎㅎ 다른 사람 풀이 보니 StringBuilder를 통해서도 reverse를 했던데, 새로운 메소드를 또 배우게 되었다. 마지막으로, 문자열을 나누는것과 합치는 메소드 2개도 배웠다. 문자열 나누는 메소드 public String split(String regex) public String split(String regex, int limit) regex : 문자열을 나누기 ..