알고리즘 14

백준[1213] -팰린드롬 만들기

팰린드롬이란 거꾸로 읽어도 제대로 읽는 것과 형태가 같은 문장을 이야기한다 (내이름은 이효리~ 거꾸로해도 이효리~) 진짜 작은 실수로 조금 오래걸렸다. 그리고 Collection을 많이 써서 시간 초과가 날까 걱정했지만 이정도는 괜찮은 것 같다. 검색해보니 반례에 대해서 예민한 문제인 것 같다. 홀수개인 문자가 포함되어 있어도 이를 가운데 배치시키면 팰린드롬이 가능하다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) throws Ex..

백준[2805] java -나무자르기

이 문제에서 알아야할 점은 두가지이다. 1.이분탐색으로 풀 것 2.long타입 선언 일단 문제를 보자 이전에 공부했던 이분탐색을 생각해냈다. 특정한 값을 구해야할 때 그 시간을 줄여주는 좋은 방법이다. 이문제에서 long타입을 써야 하는 이유는 나무의 높이가 최대 1,000,000,000이기 때문이다 int형으로는 계산할 수가 없다. import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n= sc.nextInt(); long height = sc.nextInt(); long[] ..

백준[1244]- 스위치 켜고 끄기

진짜 문제는 끝까지 읽어야 한다. 쉬운 문제였지만 출력 조건을 제대로 안읽어서 자꾸 출력 오류가 났었다.... 반성반성 문제 그대로 구현만하면 되는 쉬운문제다. import java.util.*; public class Main { private static int[] arr; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); String inputStr = sc.nextLine(); String[] inputArr = (inputStr).split(" "); arr = new int[n+1]; arr[0]=0; for(int i=0;i

코드업[3321]- 최고의 피자🍕

처음에 문제를 잘못읽어서 '엥 그냥 더하면 되는거 아닌가'했다! 그럴리가 없지! 토핑의 가격이 모두 같으니, 토핑의 칼로리가 크면 클수록 1달러 당 열량의 수가 클 것이다 ex) 토핑 A: 칼로리 200 가격 2 --> 1달러당 열량: 200/2=100 토핑 B: 칼로리 10 가격 2 --> 1달러당 열량: 10/2= 5 그러니 칼로리가 높은 토핑부터 더하면서 [1달러당 열량의 수]를 비교해보면 된다. import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Scanner; public class Main { public static v..

프로그래머스 코팅테스트 문제: 체육복

프로그래머스 level1의 문제이다. 오늘 하루종일 알고리즘 문제를 너무 못풀었다. !자신감 회복!을 위해 푼 문제였는데 처음에 오답이 나와서 정말 당황했다. 하지만 문제를 다시 읽어보니...함정이 있었다! 그 함정을 빼면 쉬운 문제였다 정말 많은 풀이들이 생각이 났다. 문제자체는 쉽지만 어떤 풀이를 선택하냐에 따라 받을 수 있는 점수가 달라질 것 같았다. 그래서 level1인 만큼 원초적인 풀이를 해보고 싶었다. class Solution { public int solution(int n, int[] lost, int[] reserve) { int answer =0; int student[]=new int[n]; for(int i=0;i

프로그래머스 코딩테스트 문제: 카펫

프로그래머스 level2의 문제이다. level2문제치고 쉬운편이었던 것 같다 고등학교때 정말 자주 봤었던 유형의 문제이다...! 그래서인지 너무 처음에 너무 수학적으로 접근했었던 것 같다. 다른 사람들의 답안을 보니까 다들 간결하게 쓴 것 같다. 나같이 푼사람은 ....못본 것 같다.... import java.util.*; class Solution { public int[] solution(int brown, int red) { int[] answer = new int[2]; boolean flag=true; ArrayList arr=new ArrayList(); for(int i=red;i>0;i--){ if(red%i==0){ for(int j=0;j

프로그래머스 코딩테스트 문제: 스킬트리

프로그래머스 level2에 해당하는 문제이다. 문제를 풀면서 반복문이 너무 많이 나와 굉장히 당황했었다. 하지만 for문을 쓸 때 continue와 break문을 적절하게 사용하면 for문이 크게 문제가 되지는 않는 것 같다. 정답을 맞추고 다른 사람들의 풀이를 보고 내가 너무 바보같이 느껴졌었다.. skill의 순서는 index값 자체이기 때문에 hash에 따로 정의하지 않았어도 됐다...정말 바보같지만 hash공부를 한번더 한셈치자! for문 제어도 공부했으니까! (hash의 valuer값으로 순서를 지정해주지 않고 그냥 char의 index값으로만 해결이 된다) 다른 사람들의 풀이중 hash를 쓴 사람은 없었고 점수 또한 좋게 받은 것에 의의를 둔다...! import java.util.*; cla..

프로그래머스 코딩테스트 문제: 다리를 지나는 트럭

level2의 문제이고 꽤나 난이도 있는 것 같다. 다리를 지나고 있는 하나하나의 트럭이 다리에 들어온지 몇초가 지났는지를 아는 것이 제일 까다로웠다. 그래서 검색찬스... 원래는 ArrayList로 전부 구현하려고 했으나 queue연습을 위해 이를 이용했다. 내가 궁금했던 다리에 들어온지 몇초가 지났는지에 대한 것은 truck을 class로 만들어버리는 것으로 해결가능했다. 트럭이 가지고 있는 정보는 무게 뿐만이 아니라 다리에 진입하고 지난 시간도 포함했어야 했다. 그이후에는 크게 어렵지 않은것 같았다. 다리에 올라와있는 Array는 Queue를 사용하지 않았다. 다리에 올라와 있는 트럭이 몇대인지 모르는 상황이다. 이 때 다리에 올라와 있는 트럭 모두에게 index값(다리에 올라오고 지난 시간)을 계..