전공공부 14

[백준 2665번] 전깃줄 (Python)

문제 설명 두 개의 전봇대가 존재한다. 그 사이를 여러개의 전깃줄로 연결해 놓았다. 연결된 전깃줄이 서로 교차하지 않도록 하기위해서 몇 개의 전깃줄을 제거하려고한다. 이에 남아있는 모든 전깃줄이 교차하지 않기위해 제거해야하는 전깃줄의 최소 개수를 구해야 한다. 문제 해결 (Pseudo code 작성) 1 2 3 4 5 6 7 8 9 10 Input num_of_wire Input connected_wires : [connected_A_pole, connectec_B_pole] Sort connected_wires by connected_A_pole Set connected_B_poles to sorted_connected_wires[connected_B_pole] Set max_remaining_wire..

전공공부/백준 2021.01.27

[백준 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. 둘 다 지른경우 로 나뉜다.

[JAVA] 문자열 표현 (String, StringBuffer, StringBuilder)

Java에서 문자열을 표현하는 방법에는 3가지가 존재한다. String, StringBuffer, StringBuilder 각각의 특징과 차이점에 대해서 알아보자. 특징 String String은 character의 배열이다. String들은 상수이기 때문에 한 번 생성된 후에는 값을 바꿀 수 없다.(immutable) 그렇기 때문에 삽입, 삭제보다는 검색에 유리하다. 개별 character들을 검색하고, string들을 비교, 검색하고, substring들을 추출하고, 모든 character들을 대문자나 소문자로 변경한 복사본을 만들 수 있는 함수를 제공한다. Java에서는 +로 문자열을 병합할 수 있는 연산자를 지원하고, 다른 객체들을 스트링으로 변환하는 것도 지원한다. 문자열 병합은 StringBu..

전공공부/JAVA 2020.10.19

[프로그래머스] 탐욕법(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] 결국 순열의 결과가 나오는데, 그 당시에 이 아이디어를 생각해낸 나는 "유레카"를 외쳤다... 여튼 조합은 순열과 다르게 순서를 요하지 않기 때문에, 순열에서 중복을 제거한 것이 조합이므로, 나처럼 조합과 순열을 혼합하여 코드를 사용..

[JAVA] Comparable과 Comparator의 차이점

Java에서 기본 라이브러리로 제공해주는 정렬이 2가지 존재한다. (1) Arrays.sort() (2) Collections.sort() Arrays.sort()- 순수 객체의 배열을 정렬 기본적으로 오름차순 정렬(숫자든 문자든) Collections.sort() - 컬렉션 객체들을 정렬 컬렉션 객체들을 비교하기 위해서는 객체에 comparable이 구현되어 있거나, sort메소드에 comparator 객체를 파라미터로 함께 보내주어야함. Comparable 비교가능한 객체로만듬. 자기자신과 비교하기 위한 다른 객체로 파라미터 1개 Comparator 비교기로 만듬. 파라미터 2개

전공공부/JAVA 2020.10.07

[JAVA] Math.pow() 를 이용한 거듭제곱

알고리즘을 공부하다가 거듭제곱을 사용해야해서 당연하게 캐럿(^)을 사용했는데, 값이 이상하게 나왔다... 값이 이상하게 나올 수 밖에 없는게 캐럿을 거듭제곱 표현으로 사용하는 것은 편집기에서 제곱을 표현할 수 없어서 제곱을 표현하기 위한 기호로 사용했었는데, 이를 당연하게 연산자로써 사용하니 안될 수 밖에... 이에 Java에서는 java.lang.Math클래스에서 pow()메소드를 제공한다. 왜 메소드 이름이 pow인가 알아보니 수학에서 거듭제곱은 power라고도 한단다. 사용법은 밑과 지수를 인자로 보내주면되고, static double pow(double a, double b) a는 밑이고, b는 지수이다. static으로 선언되어서 Math클래스를 생성하지 않고 사용가능하다. ex) 2의 3제곱(..

전공공부/JAVA 2020.10.07