전체 글 112

백준- 행운의 문자열 자바/java

정말 어이가없는건..c++할때는 뭐가 좋은지 몰랐는데 갑자기 순열을 많이 쓰게 되면서 c++의 좋은점을 깨달았다..next permutation을 사용할 수 있는 것인데 자바에서는 그냥 구현해줘야 한다..ㅎ 그래도 뭐 직접 구현해야 실력도 늘지.. - 먼저 각 알파벳 종류와 개수를 map에 저장해주었다. -> 이건 나중에 나눠줄때 필요해서 - 그다음 모든 순열 조합을 찾아내고 -- 순열 찾는건 다른 글에 있으니 그걸 찾아보도록/ 블로그에도 많이 있다. - 찾아낸 조합은 행운의 문자열인지를 체크해준다. - check()함수 - 행운의 문자열의 개수를 센다 - count로 -마지막으로 count를 각 알파벳 개수의 팩토리얼로 나눠준다. => ex) aabc일때 a(첫번째 a)ba(두번째 a)c 와 a(두번째..

프로그래머스 - 위장 /해쉬/자바 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- Calendar /날짜계산/시간 계산

코딩테스트를 하다보면 날짜계산이 나오는 순간 멘붕이 되는것같다.. 파이썬처럼 데이터 타입을 신경안써도 되면 조금 더 수월하려나.. 무튼 씨쁠쁠일때도 자바일때도 날짜계산은 너무 어렵다..😂 - 두 날짜의 차이를 계산해야할때! - 초단위 date를 년도부터 시간까지했지만 날짜만 적어도 계산이 가능하다! 년도는 네글자로 yyyy형태로 적어도 된다. 저번에 코테볼때는 두글자밖에 없길래 그냥 두글자로 해본것일뿐이다.. String을 Date 타입으로 바꾼 뒤, 시간의 차이를 계산한다. 밑에처럼 하면 '초'를 단위로 두 날짜간의 차이가 계산된다. 계산 결과는 long 타입으로 받아줘야한다 - 에러사항 1) parse도 try-catch 문을 쓰지않으면 error: unreported exception ParseEx..

프로그래머스-네트워크 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,..

프로그래머스 - 해시/ 전화번호 목록 JAVA

programmers.co.kr/learn/courses/30/lessons/42577?language=java 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조�� programmers.co.kr LG 코테가 c++이 안돼서..급하게 java로 준비중이다.. 이번 문제 역시 문제를 잘 생각해야한다. 처음에 생각없이 contains를 사용해서 풀었다가 테스트케이스 1,5를 통과하지 못했는데 그 이유는 접두어를 생각하지 않고 포함하는 것만 생각했기 때문이다. 12345 와 34가 있을때 이는 접두어가 아니므로 true를 리턴해야한다. 그래서..

프로그래머스 - 프린터 c++

https://programmers.co.kr/learn/courses/30/lessons/42587 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린�� programmers.co.kr 문제가 누가봐도 큐를 사용해서 풀어야하는 문제였다. - vector의 max_element를 잘 사용하면 빠르게 풀리는 문제였다. -*max_element를 사용하면 max값을, max_element를 이용하면 max의 index를 얻어올 수 있다. max를 찾을때마다 그 index에 대한 값을 -1로 바꿔주면서 남은 것들의 max값을 찾아갔다. -que는 lo..

계단 오르기 문제 - 재귀함수 사용

문제는 이런거였고, 재귀함수를 사용해 풀었다. - 처음에 1로 시작했을때 -처음에 2로 시작했을때를 나눠서 방법을 다르게 하였고, left를 통해 남은 계단의 수를 체크해주었다. 남은 계단의 수가 0일때 방법의 수(count)를 1씩 증가시켜 마지막에 count를 출력해주었다. #include #include #include #include using namespace std; int count=0; int calculate(int num, int left){ if(num==1){ left-=1; } else if(num==2){ left-=2; } if(left==0){ count++; return 0; } else{ if(left>=1) calculate(1,left); if(left>=2) calc..

백준 2493 탑 c++

https://www.acmicpc.net/problem/2493 2493번: 탑 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 순서대로 하나의 빈칸을 사이에 두고 주어진다. 탑들의 높이는 1 �� www.acmicpc.net 이 문제는 프로그래머스 탑문제랑 같은 문제인것 같다 프로그래머스처럼 똑같이 이중 for문으로 풀었으나 시간초과로 실패했다.. 컴파일 에러는 c++14로 해야하는데 c++로 선택해서 컴파일 에러가 난 것같다... 무튼 이문제는 그냥 다 stack으로 푸는 문제였다. 역시 프로그래머스 풀듯이 풀면 안되는거였는데.. 무튼 !! 아이디어를 생각하는게 조금 어려웠다 idea 1. 처음 들어오는 애는..

강의용/ 프로그래머스 - 완주하지 못한 선수 c++

풀려고 했는데 사실 이미 푼 문제라서 기록이 남아있었다.. 푼건 알고있었지만 새롭게 풀고싶었는데 이미 코드가 보여서 어쩔 수가 없었다.. https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수�� programmers.co.kr 이 문제는 블로그에 기록을 안한것같아서 기억을 더듬어 보자면 이문제는 동명이인이 있다는게 문제였다 처음에는 find로 찾아서 풀었지만 동명이인때문에 find로 간단히 풀 수가 없었다. 그래서 sort로 ..

카테고리 없음 2020.07.08