코테 준비-문제풀기 37

프로그래머스 - 정수삼각형/ 동적계획법/ dp/ 자바/JAVA

programmers.co.kr/learn/courses/30/lessons/43105 코딩테스트 연습 - 정수 삼각형 [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30 programmers.co.kr 이문제는 딱보면 dfs/bfs인것 같기도 하다. 결국은 완전탐색인가 근데 그렇게 풀면 효율성 체크에서 문제가 생기겠지..?(사실 안해봐서 모름) 그래서 나는 dp로 풀었다. dp문제니까 ㅎ 우선 처음값은 [0][0]에 저장해두었고 그다음값은 3개의 경우로 나눴다. 1) 첫번째 요소일때 2) 마지막 요소일때 3) 둘다 아닐때 삼각형의 첫번째는 이전 row의 첫번째로만 내려올 수 있다. 삼각형의 마지막요소는 이전 row의 마지막으로만 내려올 수 있다. 나..

프로그래머스 - 위장 /해쉬/자바 java

HashMap을 사용해서 category별로 몇 개가 있는지를 저장해주었다. 솔직히 여기까지는 괜찮은데 식을 어떻게 세워야할지가 문제였다.. 이건 분명 식을 세워야하는데 바로 떠오르지 않았다.. 식은 카테고리별 옷의 개수+1 을 해서 다 곱해주고 마지막에 -1을 하는 것인데 예를 들면 상의가 파랑.빨강이 있고 하의가 보라, 초록이 있다고 하자 상의는 -> 안입을 경우, 파랑, 빨강으로 3가지다. 하의는 -> 안입을 경우, 보라, 초록으로 3가지다. 그래서 3 x 3을 해주고, 둘다 안입을 경우는 없으니까 1을 빼준다. 그럼 완성 import java.util.HashMap; class Solution { public int solution(String[][] clothes) { int answer = 1..

프로그래머스 - 카펫 /완전탐색/ JAVA 자바

width: x, height:y라고 할때 1. brown은 2x+2y-4다. =>한줄만 테두리라는 것을 잊지 말아야 한다! 2. width는 최소 3이다. yello가 '1'일때 width가 최소 3이 되어야한다. 그리고 width는 최대 (brown-2)/2다. => height가 1이라고 할때 양옆에 2개 필요함 && 위아래로 같은 갯수 필요함 그래서 width를 3부터 max_width까지 돌아주게 했다. 3. height는 (brown-2*width+4)/2 4. brown+yello가 width*height랑 같아지면 바로 리턴 다른 블로그들을 보니 아이디어는 비슷하지만 조건문을 조금씩 다르게 하는 경우도 있다. 참고하실 분은 다른 블로그도 더 찾아보시길.. class Solution { pu..

프로그래머스 - 여행경로/DFS/BFS JAVA 자바

처음에는 되게 쉽다고 생각했는데 실행시키니까 기본테케는 작동하는데 채점할때 1,2번이 안돼서 시간을 많이 잡아먹었다.. 알파벳 순으로 했을때 안되는게 있을 수 있다 - 그 경우는 다른 방식을 찾아야한다 무튼 count가 tickets.length일때만 저장을 해야한다. 그래서 str에 계속 붙이다가 count가 size일때 리스트에 넣어주었고 리스트는 알파벳순으로 정렬해서 가장 첫번째 요소를 출력하도록 하였다. 중간에 잘못 갔을때는 visit이랑 str(route)를 이전으로 되돌려 주어야한다. 아마 1번인지 2번인지 테케가 안되는 이유는 밑에 예시 때문일 것이다. ex) ["ICN", AAA], [AAA,CCC], [AAA,DDD], [DDD,AAA] 여기서 aaa ccc를 먼저가게 되면 답이 안나오기..

프로그래머스 - 단어변환 JAVA 자바

idea 1 . words에 target이 있는지 확인- 없으면 그냥 바로 0을 return하게 했다. 2 . dfs로 돌면서 확인 해주기 3 . 한글자차이인지 체크해주기 -> check => 이건그냥 단순하게 구현함 count=0부터 시작해서 방문하지 않았고, 한글자 차이 밖에 안나면 count를 증가시키고 또 돌아준다. target을 찾을때까지 만약 target이랑 같으면 count값이 min인지 비교해주기 여기는 tmi 이 문제 풀다가 순서가 같다고 했을때 Set이랑 for문이랑 속도차이가 있는지 궁금해서 테스트를 해봤는데 배열을 set으로 바꾸는데 걸리는 시간때문에 그런지 for문이 더 빨랐음(테스트케이스 5개에 0.2초정도) 역시 당연한건가.. 그냥 궁금해서 해봄 참고로 Array to Set은..

프로그래머스 - 완전탐색 소수찾기 JAVA 자바

Idea 1. String을 split해서 배열에 넣어준다 2. 배열에서 1개부터 - length까지의 개수의 조합을 찾아낸다. -> perm(arr, depth, k) k: 조합할 숫자의 개수 (개수니까 k는 1부터 시작해야한다) depth: 현재 depth (depth는 0부터 시작한다 ) 3. 소수인지를 판별해서 소수면 set에 저장해준다. => 소수판별은 sqrt를 사용하였는데 제곱근까지만 돌려보면 알 수 있다고 한다!궁금하면 검색해보길.. 여기서 같은 숫자가 들어갈 수도 있으니 set에 있는지 없는지를 먼저 확인하고 소수를 판별하였다. (이건 check_prime들어가기전에 체크했음) 판별과정은 밑에 블로그 링크를 달아놨으니 그걸 참고하면 좋을 것 같다.. import java.util.*; c..

프로그래머스-네트워크 JAVA DFS/BFS

역시 dfs/bfs문제는 아이디어 떠올리는게 제일 어렵다.. 1) visit으로 방문한 곳/방문하지 않은 곳을 체크해준다 2) 이어져있는 것들은 한번만 answer을 증가시키면서 visit은 모든 노드에 체크를 해줘야한다 3) dfs에서 들어오면 무조건 visit을 true로 바꿔줌 -> 방문하지 않은 것중에 이어져있는것(computers[index][i]가 1인것)을 찾아서 체크해주면 된다 -> 이때 자기 자신도 패스 4) answer++은 처음 for문에서 dfs를 벗어났을 때만! ++해줌 연습 좀 더 많이 해야겠다... class Solution { public int dfs(int index, boolean[] visit, int[][] computers){ visit[index]=true; fo..

Codility - Lessons- BinaryGap [Java] //java 문자열 앞으로 붙이기

app.codility.com/programmers/lessons/1-iterations/binary_gap/ BinaryGap coding task - Learn to Code - Codility Find longest sequence of zeros in binary representation of an integer. app.codility.com binary gap문제를 풀었고, 처음에 33점 받은 코드와 100점 코드를 올리도록 하겠다.. 33점 코드를 풀면서 java에서 string을 앞으로 붙이는 방법을 찾았고, 딱히 뭐가 없어서 메소드를 생성했다 JAVA에서 String을 앞으로 붙이는 방법을 찾기위해 오신 분들은 아래로!! -> 메소드 생성으로 해결했으니 다른방식을 찾는 분은,,,bye,..