일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- Stack
- 백준 2660번 회장뽑기 G5
- toUpperCase
- dp
- 코틀린기초
- HashSet
- 프로그래머스 java
- 백준 11725번 트리의 부모 찾기
- 스프링 on-profile
- 프로그래머스 자바
- 백준 8979번 올림픽 S5 자바
- 백준 1600번 말이 되고픈 원숭이
- StringBuilder
- HashMap
- 프로그래머스
- StringTokenizer
- kotlin
- replace()
- map
- 백준 2589번 보물섬 G5
- 백준 1240번 노드사이의 거리
- 백준 1967번 트리의 지름 G4 자바
- 서브모듈 yml
- 포인트 컷
- hash
- 전위 중위 후위
- 스프링 다중프로필
- Java
- append
- 백준 2206번 벽 부수고 이동하기 G3
- Today
- Total
목록분류 전체보기 (141)
말하는 컴공감자의 텃밭
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/n0f39/btsyQexCxjR/dnCPpaUdttKGknkz40wmk0/img.png)
간단해 보여서 단계가 높지만 풀어보았다. X가 1보다 큰 제곱수로 안나뉘면 '제곱 ㄴㄴ수'라고 칭하는데 제곱수는 정수의 제곱으로 입출력이 굉장히 크기에 효율성이 중요한 문제라고 생각이 들었다. 최대한 빠르게 소수를 판별하는 알고리즘을 찾아봤다. 아레토스테네스의 체 가 있었다. 간단하게 정리하면 2부터 원하는 범위까지의 수를 나열하고 소수를 우측에 써가며 해당하는 배수를 모두 지우는 방식이다. 예시의 범위가 120까지인데 11^2 > 120 이므로 11보다 작은 배수만 지워도 충분한게 장점이다. 2,3,5,7 의 배수만 지우면 모두 소수이기 때문이다. 이전의 값들은 선행으로 처리되므로 반복연산의 시작점이 달라 효율적이라고 할 수 있다. 그렇다면 연산의 시간복잡도는 Max -min 의 모든 수에서 제곱수를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dqrElu/btsyOZuqCdO/dXc4nik2v4xzb3snLaL0TK/img.png)
지민 국왕이라니,, 잠만보려나 단순한 그리디 문제이다. B를 재배열하면 안된다고는 했지만 ㅎㅅㅎ 그냥 풀기 쉬우려면 정렬하면 그만이다. 가장 큰수와 가장 작은값끼리 곱하면 최소값이기에 sorting해서 반대로만 붙여주면 된다. ex) 1 3 2 4 와 4 2 1 3이 있다면 정렬 후 -> 1 2 3 4, 1 2 3 4 역순으로 붙여주면 된다. 1 * 4 + 2 * 3 + 3 * 2 + 4 * 1 HTML 삽입 미리보기할 수 없는 소스
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/w3zuZ/btsyNrq41oh/5bKERwzPKkIUttAhQA7aeK/img.png)
단순 구현문제이다. N번째는 N의 배수의 창문을 열고 열려있으면 닫는다. 창문은 홀수번 열어야 열려있는 상태이므로 약수가 세개인 경우를 생각하다가 제곱수를 떠올렸다. 제곱수는 모두 약수가 3개이다. ex) 4 -> 4, 2, 1 / 9 - > 9, 3, 1 HTML 삽입 미리보기할 수 없는 소스 단순하게 생각했다면 메모리 문제가 있었을듯 싶다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/59tg7/btsyPXVWtSH/zaQasoCg0QKiX7mx5uUyg0/img.png)
문제가 길다. 정리하면 1과 0으로 나뉘어진 정사각형의 색종이가 주어지고, N/2로 나누면서 정사각형이 모두 한 색인 경우 정복이 끝난경우이다. 전부 나눈 후 나뉘어진 파란색 1 과 하얀색 0의 개수를 출력하면 된다. 입력된 종이는 이차원 배열로 받아주고, 재귀함수를 쓰기위해 div 함수를 선언했다. if( (paper[x][y] - paper[x+i][y+j]) != 0 ) 를 통해서 같은 숫자끼리 영역에 존재하는지 확인했고, boolean chk 를 통해서 영역내에 다른 색상이 있는지 판단하여 존재할 시 재귀함수를 호출했다. 범위는 4등분하여 x, y, n을 다시 재귀함수에 넣어줬다. HTML 삽입 미리보기할 수 없는 소스
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bIy9wf/btsyPRuHOsv/kReoQGbTa17AQo5nci7d8k/img.png)
그리디 알고리즘 중 하나로, 최소의 동전 개수로 해당하는 수를 만드는 문제이다. 높은 단위의 동전 값부터 뺼수 있다면 뺴고, 아니면 더 작은 값을 빼는 방식이면 될듯 싶다. 먼저 입력 받은 단위를 배열에 넣고(오름차순이므로 sorting은 필요없다) for - while문을 통해서 뺄 수 있는지 여부를 판단하고 없다면 idx를 올려주었다. 빼게된다면 asnwer ++ HTML 삽입 미리보기할 수 없는 소스
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/BIAuR/btsyLIF4H6R/QdNKTf6V1QWp5251OrhSo1/img.png)
전형적인 그리디 알고리즘으로, 인출시간이 빠른 사람을 앞에두면 최소의 시간으로 모두 인출 할 수 있다. 다른 조건을 확인 할 건 없으므로 정렬 후 순서에 맞게 더해준다. temp 변수를 통해 반복적으로 앞의 수를 더 해준다. HTML 삽입 미리보기할 수 없는 소스
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/3HYrF/btsyteS1tKH/A6oOHKK9EOgoy9Sk8lVvn1/img.png)
블로그 정리가 오래되어서 몰아서 정리하는 중인데 아무래도 예전에 풀었던걸 다시보면 다른 로직으로 생각이 들기도 하는것 같다.. 정리 잘해둬야징 문제를 정리하면 숫자가 주어지고, 실수가 나올때 마다 0을 외쳐서 실수임을 말한다. 스택 자료구조를 사용해서 간단하게 풀수도 있고, 리스트로 값을 넣고 0 나오면 이전걸 지우는 방법도 가능할 듯 싶다. Stack 사용 코드 HTML 삽입 미리보기할 수 없는 소스 List 사용 코드 HTML 삽입 미리보기할 수 없는 소스 간단쓰~ * List 는 add, remove로 추가 삭제 가능. 값 얻는건 get 사용 * Stack은 push, pop으로 추가 삭제 가능. 상단 확인은 peek();
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/p3sJ1/btsv7ph5yH9/uUpQfMLNuBJULDh5DmoUK0/img.png)
문제를 보게되면, 채팅방 기록 개수가 첫줄에 주어지고, 이후로 사용자의 닉네임인 문자열이 주어진다. 처음에 누군가가 들어오면 곰곰티콘으로 인사를 하고, 같은 닉네임이 추가로 나온다면 일반 채팅이다. 곰곰티콘이 얼마나 사용되었는지 출력하라. 간단하게 중복을 체크하면 되는 문제였다. HashSet이 떠올랐고 바로 작성했다. 조건을 str이 ENTER라면 clear해주고, 아니고 !contains라면 Hash에 add하고, answer ++ 해주었다. HTML 삽입 미리보기할 수 없는 소스 근데 이상하게 특정 input에서 오류가 발생해서 틀리고 말았다. 세는곳도 없고 반례가 있나 생각했는데 첫줄이 씹히는것 같았다. 아무래도 nextInt()로 받고, 다음부터 str로 받아서 공백이 들어갔었나보다 K를 받고,..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lMWQF/btstNAYNE2L/ILgDcLPD9JFukHdVr7xFnk/img.png)
A와 B가 케이크를 둘레에서 둘레로 한번씩 자른다. 조각이 K 넘게 자른사람이 케이크 위 맛난 딸기를 냠념냠 가능하다. 따라서 A와 B는 모두 최선을 다해 자신이 K 조각이 넘길 바라며 최선을 다한다. 처음에는 규칙을 찾으려고 했었다. 에드 혹 태그가 달려있어서 특별한 자료구조는 필요하지 않겠다 싶었고. 경우의 수들을 나눠봤다. 먼저 케이크 둘레에서 둘레를 자르기 때문에 자른 횟수가 N번째인 사람은 조각을 최대 N개를 늘릴 수 있다. 지나친 간선 + 1이 최대이고. 둘레에서 둘레기 때문에 어떻게든 1조각도 늘어날 수 있겠다 생각을 했었다. 그렇다면 최선을 다한다만 생각하면 되려나? 였다. 비슷한 게임인 베라31에선 내가 상대방을 이기기 위해 상대방은 나를 못 끝내지만 다음에는 내가 끝내던지. 내가 끝내던..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dVNlYM/btsteMTcNae/k2N4h4fySfPORfw0MZOWPK/img.png)
처음엔 쉬워 보였다, 최대자릿수가 6자리 기도 하고.. 교환 횟수를 홀수와 짝수를 나누어서 큰수 찾아서 비교,,, 아 할게 많구나 싶었다. 아니면 그리디 방식으로 해야하나? 했다가 6자리니까 DPS로 풀어보자 했다. DPS는 완전 탐색으로 자물쇠가 000부터 999까지라면 모든 수를 넣어서 열어보는 방식이다. HTML 삽입 미리보기할 수 없는 소스 에잉 귀차나 먼저 숫자를 %10으로 자릿수를 배열로 담아준다. 조작 횟수가 길이보다 많다면 의미가 없어지므로 불필요한 연산은 줄여주었고, 재귀 dfs 함수와, 위치를 바꾸는 swap 함수, 배열을 숫자로 만드는 함수 arrToInt를 만들어 주었다. 재귀는 사이클이 없도록 if문에 조작 횟수를 다 사용했을 경우 return 하도록 구성했다. for문을 통해 모..