본문 바로가기

Problem Solving/백준

(12)
[Kotlin] 코틀린 중복된 횟수 구하기 기존에는 C++ 만 사용했는데 컬렉션을 잘만 활용한다면 코틀린이 정말 편한것 같다. 그러나 여전히 모든걸 스트링으로 읽어와야한다는것,,, 아직 불편하다. 입력받거나 배열 생성해주는건 아직까지 C++ 이 더 익숙하다. 코틀린으로 할때마다 매번 찾아봐서 안까먹기 위해 정리한다. 코틀린 컬렉션 활용하기 GropuBy IntArray.groupBy를 살펴보면 다음과 같다. public inline fun IntArray.groupBy(keySelector: (Int) -> K): Map { return groupByTo(LinkedHashMap(), keySelector) } 주어진 keySelector function이 돌려주는 값들을 key값으로 하고 key값과 매칭되는 원소들을 list로 가지는 맵을 돌려..
[백준] 1966: 프린터큐 프린터큐가 날 눈물짓게 해... 생각보다 구현이 사나워서 해답을 찾아보니 priority queue를 사용한 풀이가 나왔다. 그런데 생각보다 priority queue로 해결하는 것이 아닌, queue, priority queue를 2개 다 쓰길래 그냥 queue, vector로 구현했다. 원래는 priority queue에서 pair로 받아서 compare하는 부분을 정의해서 queue하나로 다 완성하고 싶었는데 우선 compare부분을 내가 정의하려고 하는것에서 실패했고, 출력순서를 신경써야 하기 때문에 한 큐에 해결이 불가능하긴 했다. priority_queue 쓰는거랑, vector에 저장해서 sort 하는거랑 큰 차이가 있는지는 모르겠다. (둘 중에 뭐가 더 빠를까?) 내가 짠 코드 #inclu..
[백준] 1406번: 에디터 백준 문제는 시간초과나 메모리초과에 신경을 써야하는게 많은 것 같다. 이번 문제도 string과 cursor위치를 int로 체크해주면서 했더니, 시간초과가 떠서 list로 구현. 데이터의 삭제나 추가가 번번히 일어나는 경우는 string 보다는 list가 효과적이라는 사실을 깨달음. C++에서 list는 많이 안써봐서 낯설다. 내가 짠 코드 #include #include #include #include using namespace std; int main(void){ int N,i; char op[4]={'L','D','B','P'}; list data; list::iterator cursor = data.end(); string input,operand; getline(cin,input); for(i..
[백준] 9012: 괄호 stack을 이용해서 push, pop을 처음 구현했는데 자꾸 runtime 에러가 나고 돌아가지 않길래, 결국은 그냥 +1, -1을 이용한 카운팅으로 했다. 내가 짠 코드 #include #include #include using namespace std; int main(void){ int N,i,j,value; string input; scanf("%d\n",&N); for(i=0;i
[백준] 10816: 숫자 카드 2 처음 생각은, 카드를 입력받으면서 카드 개수도 같이 세주는 것을 생각했는데, 카드 개수를 세기 위해서는 매번 위치를 찾아야해서 여기서 시간초과가 계속 뜬 듯 하다. 해법은 이진탐색을 이용해서, 일단 입력 받은 후에, sortinng 하고 lowerboudn, upperbounnd찾는것. 내가 짠 코드 #include #include #include using namespace std; vector deck; int N; int upperBound(int value); int lowerBound(int value); int main(void){ int i,value,idx; int upper,lower; scanf("%d",&N); for(i=0;i
[백준] 11651번 : 좌표 정렬하기 2 C++ vector의 pair를 이용하고, sort에서 비교함수를 사용자 정의 하는 문제. 내가 짠 코드 #include #include #include using namespace std; bool comp(paira, pairb){ if(a.second == b.second) return a.first sets; scanf("%d",&N); for(i=0;i
[백준] 1009: 분산처리 자꾸 틀렸다고 나오는데, 나머지가 0으로 떨어지면 0이 아니라 10을 출력해야 한다. 내가 짠 코드 #include using namespace std; int main(void){ int N,i,j,a,b,value; scanf("%d",&N); for(i=0;i
[백준] 1032: 명령 프롬프트 string문자열 입력 받을 때는 이전에 줄바꿈을 받지 않도록 하기 위해 scanf("%d\n"~)까지 잘 해주는 것과, getline으로 줄 단위로 받고, 특정 위치의 내용을 바꾸기 위해서는 replace 사용해서 바꾸는 것. 내가 짠 코드 #include #include using namespace std; int main(void){ int N,i,length,j; char input[55]; string list; string ans; scanf("%d\n",&N); for(i=0;i