전공공부/알고리즘 5

[백준 17609번] 회문

예제 입력은 다 통과했으나 틀렸다고 하여서 반례를 찾게된게 baaba 였다 출력으로 1이 나와야 하는데 나의 코드에서는 2가 나왔다. 처음의 알고리즘 설계를 왼쪽 오른쪽에서 하나씩 문자를 읽으면서 비교하다가 다른 문자가 나오면 left+1 이랑 right 랑 비교해서 같다면 left를 없애고 계속 진행 left 랑 right-1 랑 비교해서 같다면 right를 없애고 계속 진행 둘 다 안되면 일반 문자열로 판별 하도록 하였는데, 이런식으로 설계를 하니 left+1 이랑 right 도 같고 left 랑 right-1 도 같을 수 있기에 해당 경우에는 둘 다 진행을 해봐야 한다. baaba로 설명을 해보면 left (0번째 index) : b right (4번째 index) : a left와 right가 다..

[백준 17249번] 태보태보 총난타

이 문제는 정규표현식을 사용할 줄 아는지에 대한 문제였다. 문제의 얼굴을 표현하는 특수문자들이 정규표현식에서 사용되고 있는 문법이기에 이를 정규표현식의 특수한 기능이 아닌 특수문자 그 자체로 사용하기 위해서는 백슬래시(\)를 사용해서 표현해야한다. 즉 (를 표현하기 위해서는 "("가 아닌 "\\("처럼 표현해야 한다. 그리고 경우의 수는 4가지로 1. 왼쪽 오른쪽 둘 다 주먹을 지르지 않은 경우 2. 왼쪽만 3. 오른쪽만 4. 둘 다 지른경우 로 나뉜다.

[프로그래머스] 탐욕법(Greedy) > 큰 수 만들기 (java)

탐욕법(그리디 알고리즘, Greedy Algorithm) 그리디 알고리즘(욕심쟁이 알고리즘)이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자" 라는 모토를 가지는 알고리즘 설계 기법이다. 그리디 알고리즘에 관한 좀더 자세한 내용은 아래를 확인하자. 그리디 알고리즘 - 나무위키 그리디 알고리즘(욕심쟁이 알고리즘, Greedy Algorithm)이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자" 라는 모토를 가지는 알고리즘 설계 기법이다. 예를 들어 namu.wiki 우선, 나의 마지막 코드를 보기 전에 문제를 맞추기 위한 여정을 말해보려한다. 같이 헛다리 장인의 헛다리를 하나씩 살펴 보도록 하자. 나의 설계 1. 처음 나의 설계는 이러했다..

[알고리즘] 소수 판별 구현 (Java)

프로그래머스를 이용해서 코딩테스트를 하다가 굉장히 좋은 효율의 소수 판별 isPrime()을 구현한 것을 발견하고, 내 나름대로의 의견을 추가하고 수정해서 정리해두려한다. 우선 아래의 코드를 조금 더 쉽게 이해하기 위해 두 가지를 알면 좋다.! 1. 2를 제외한 나머지 짝수들은 모두 소수가 아니다. 2. n(숫자)가 소수인지 확인하기 위해 √n 보다 큰 수를 나눠보는 것은 무의미한 일이다. 왜냐면 n이 √n 보다 큰 수로 나눠진다는 것은 몫으로 √n 보다 작은 수가 나온다는 말인데, 그러면 √n 보다 큰 수로 나눠떨어지기 전에 이미 소수가 아님을 발견 할 수 있게 된다. -> "유레카!" 이를 이해하고 나서 해당 코드를 함께 보자. if(a==2) count++; if(a%2!=0 && isPrime(a..

[프로그래머스] 완전탐색 > 소수찾기 (java)

레벨에 비해서 꽤나 푸는데 시간이 걸렸다... 아직은 알고리즘에 대한 지식이 너무 부족함을 느꼈다. 우선 나의 코드이다. public int solution(String number) { List numbers = stringToStringList(number); List result = new ArrayList(); Set resultSet = new HashSet(); for (int i = 1; i [1] [2] -> [2] [1, 2] -> [1, 2], [2, 1] 결국 순열의 결과가 나오는데, 그 당시에 이 아이디어를 생각해낸 나는 "유레카"를 외쳤다... 여튼 조합은 순열과 다르게 순서를 요하지 않기 때문에, 순열에서 중복을 제거한 것이 조합이므로, 나처럼 조합과 순열을 혼합하여 코드를 사용..