문제설명 생각하기 phone_book의 문자열을 정렬시킨다. 반복문을 이용해 정렬된 문자열을 비교 startsWith사용 내풀이 문자열이 숫자인 배열을 정렬시키면 ex) 119, 120, 123, 129, 130 ... 이기때문에 반복문을 한번만 사용해도 모든 문자열을 비교할 수 있다 .
문제설명 생각하기 scoville의 길이가 최대 1,000,000이기 때문에 최소값을 바로 찾는 PriorityQueue 최소힙을 사용한다. 최소값이 k보다 작을때 반복하며 원소가 하나 남았을땐 -1을 리턴 내 풀이 데이터의 크기가 크고 그 중 최소값 2개를 뽑아 더해야하는 문제이므로 우선순위 큐를 생각해야한다. java에서 PriorityQueue는 이진트리를 사용하여 시간복잡도 N(1)에서 최대 N(LogN)이 걸린다. PriorityQueue의 기능을 보자 .peek() -> 가장 우선순위가 높은 원소를 가져온다. ( 추가한 값은 우선순위에 맞게 정렬이 된다) .offer() ->queue에 원소를 집어 넣는다. .poll() -> 가장 우선순위가 높은 원소를 반환한다.
문제설명 생각하기 ArrayList를 이용해 return값을 저장하기 반복문과 조건문을 적절히 사용하기 내 풀이 두번째 while문을 빠져나가는 break 조건을 잘못설정해서 outofbound메모리오류가 1시간동안 났다.. 문제가 풀리지 않을 땐 내 코드를 차분히 다시 읽어보자. ArrayList를 int[]로 바꾸는 코드를 한줄로 쓸 수 있다. 를 꺼내기 남은 서류들 중 우선순위가 높은 서류를 찾기 (J)의 우선순위가 가장 높다면 ans++ location이 0이고, J의 우선순위가 가장높다면 return 내 풀이 두번째 for문에서 최악의 반복횟수를 생각하여 100!(팩토리얼)인 5050번 반복해준다. J(문서)를 꺼낸 뒤 리스트에서 삭제해준다. 가장높은 우선순위를 jmax에 넣어주고 반복문이 끝났을 때 J와 비교해준다. break문을 적절히 사용하여 최대반복 횟수인 5050을 채우지 않고 효율적인 속도를 낼 수 있다. 입출력 예 2번을 보면 location 0에 있는 1이 인쇄되는 순서를 찾아야 하는데 문제는 대기목록에 1이 중복되어 있기 때문에
문제설명 생각하기 깊이우선 탐색을 사용하여 문제풀기 dfs 함수를 만들어 순차적으로 +,-를 해주기 dfs함수가 끝났을 때 sum == target이라면 ans++해주기 내 풀이
문제설명 생각하기 문자열에 대한 기본적인 메소드들과 조건을 충족시켜 문자를 바꾸는 문제입니다. 문자열의 길이가 200이기 때문에 StringBuilder를 사용합니다. 각 문자열의 첫번째를 확인하기위해 int 변수 cnt를 초기화 시키고 활용합니다. 문자열 탐색도중 공백을 만난다면 cnt를 0으로 만들어 줍니다. 내 풀이 두번째 시도에 성공하였습니다. 첫번째 시도엔 문자열을 공백으로 나눈 String[]을 활용했지만 여러번의 공백이 나올 수 있기 때문에 적절하지 않은 방법입니다. 문자열 전체를 읽으면서 문자 하나씩 비교하는 전체 탐색알고리즘입니다. 키포인트는 공백이 여러번 나올 때 cnt를 0으로 만들어주고 반복문을 넘기는 것 입니다. 그래야 다음 문자열의 첫번째 글자를 확
문제설명 생각하기 반복문을 사용하여 풀건지 재귀로 풀건지 정하기 내 풀이 피보나치 문제는 팩토리얼 문제와 유형이 비슷하기 때문에 재귀함수로 푸는 실수를 하기 쉽습니다. 자료구조에 의하면 피보나치 문제는 재귀가 아닌 반복문으로 풀어야 시간적 제약을 적게 받는다고 합니다. 팩토리얼은 재귀 피보나치는 반복문 기억해야겠죠 ㅎㅎ
문제설명 생각하기 HashMap과 HashSet을 이용하여 문제를 풀기 내 풀이 2022년 카카오 블라인드 코딩테스트 1번 문제입니다. 게시판 이용자들 중에 신고가 누적 된 사람은 게시판 이용을 못하게 되고, 신고한 사람에게 신고결과메일을 보내주게 됩니다. 신고한 사람이 받는 메일의 개수를 구하는 문제입니다. 문제를 읽고 해시맵이 떠오르지 않는다면 풀
문제 설명 생각하기 실제로 맞은 개수와 0의 개수를 따로 구한다. 두개를 더한값이 최고순위 실제로 맞은값이 최저순위가 된다. 내 풀이 함수형 코딩으로 문제를 풀어보았습니다. 아무래도 main함수 안에 코드를 전부 넣는것보다 가독성이 좋은 것 같네요.
문제설명 생각하기 단계별로 요구하는 사항대로 구현하면 되는 구현 문제이다. 내 풀이 문제를 푸는데 한시간 반정도 걸렸습니다. LV1의 어렵지 않은 빡구현 문제지만 단계를 지키지 않고 구현을 한 내 탓이라고 생각이 듭니다.. 여러분은 1단계부터 차근차근 구현하세요 ㅠㅠ
문제설명 생각하기 replace를 사용하여 문자를 바꿔주기 내 풀이 s.replace("바꿀 문자","바뀌는 문자").s.replace("바꿀 문자","바뀌는 문자")형식으로 뒤에 .을 붙여서 연결하면 사용이 됩니다.
문제설명 생각하기 1,4,7일때 왼손 3,6,9 일때 오른손 그리고 2,5,8,0일때 가까운손 구하기 왼손과 오른손을 저장할 변수, 왼손과 오른손의거리를 저장할 변수를 사용하기 *,0 ,# 을 각각 10, 11, 12로 생각하고 풀기 내 풀이 문제를 푸는데 오랜시간이 걸렸다. 그래도 끝까지 직접 풀었다는 뿌듯함이 있었다. 먼저, leftha
문제설명 생각하기 board에 있는 2차원배열의 순서를 생각하기 moves의 움직임에 따라 board의 값을 변경해주기 if문으로 예외조건들 처리해주기 내 풀이 문제를 풀기
문제설명 생각하기 signs에 값이 true면 +1 ,false면 -1를 absolutes에 곱하여 출력 내 풀이 signs[i]값이 false면 absolutes[i]*-1을 해줌으로써 값을 음으로 만들어준 뒤 ans와 더한다.
문제 설명 생각하기 각 다른 3개의 숫자를 더하기 반복문으로 진행 함수형 프로그래밍 연습하기 내 풀이 3개의 숫자를 i,j,k로 만들어준다. num에 i+j+k값을 넣고 sosu(num)함수를 부른다. sosu함수에서 check값을 true로 주고 num이 소수인지 판별하는 반복문을 돌린다. 만약 num % i가 0이면 소수가 아니기 때문에 false를 주고 반복문종료 후 리턴한다. if문에 걸리지 않는다면 check에 true를 담아 리턴한다. 돌아가서 chk에 값이 담기고 그 값이 true 즉, 소수라면 ans++로 개수를세어준다. sosu함수 안에 num/2+1는 약수 중 제일 작은 값이 자신의 절반값이기 때문이다.