최대 고를 수 있는 폰켓몬의 수를 구하는 것이므로 폰켓몬의 종류 수를 먼저 구한다.
큐를 탐색해서 특정 조건에 pop을 시키려면 while문을 사용해서 아닌 경우 break를 시켜주는 것이 낫다. 만약 for문을 사용한다면 계속되는 pop으로 인덱스가 달라져 탐색할 수 없을 것이다.
이제 가벼운 백트래킹 정도는 인터넷을 보지 않고 풀 수 있다. 굿
우선순위 큐는 힙으로 풀 수 있다.처음에는 정렬이 필요하다고 생각해서 vector를 sort해서 풀려했지만 힙문제니 우선순위 큐로 풀어보기로 하였다.
모든 학생마다 고유한 찍는 패턴을 가지고 있다. 따라서 해당 찍는 방식을 배열로 만들어 원형으로 탐색(나머지 % 이용)하도록 하였고 만약 정답인 경우 맞춘 값을 세도록하였다.
해싱 문제인데 그냥 pair 써서 해도 되나? 아무튼 그렇게 풀었다.정답은 다 맞았는데 효율성에서 전부 실패하길래 for문 2개를 사용한 O(N^2)의 시간복잡도를 가지게 풀었는데 idx를 따로 사용하여 O(N)의 시간 복잡도를 가지도록 수정하였다.
인덱스가 0부터 시작하는데 문제에서는 1로 시작해서 은근 헤메었던 문제 확인을 잘 하자
다시 알고리즘 연습을 위해서 프로그래머스 레벨 1부터 찬찬히 풀어보려고 한다.cout << a+b 이런 구문이 쓸데없이 들어가 있는데 빼는 것을 잊으면 안된다! 왜 이런 쓸모없는 코드를 넣어놨는지는 모르겠지만
그냥 단순히 for문을 사용해서 구현하는 문제 조금만 생각하면 금방 풀 수 있다.
for문 2개로 행렬의 곱을 구할 수 있다.2차원 배열(벡터)로 행렬이 주어졌기 때문에 행과 열을 잘 따져서 for문을 구축해야할 필요가 있다.arr1.size()로 행렬의 열의 크기를arr10.size()로 행렬의 행의 크기를 구했다.
C++에서 string에 +를 이용하여 문자열을 append 할 수 있다. 따라서 answer 문자열에 해당 경우만큼 append하여 출력하였는데다른 사람들의 풀이를 보니까 그냥 string을 배열처럼 접근하여 사용하더라 그런 방법도 괜찮은 것 같다.
단순하게 자릿수를 구하기만 해주면 된다. 자주 사용하는 방식!
int / int = int 이므로 하나를 double로 형변환시켜 제대로 double형이 출력될 수 있도록 하자.
그냥 for문 돌리면 된다.answer의 초깃값이 1234567890으로 주어졌다고 해서 사용하지 말고 그냥 answer = 0; 로 두면 편하게 풀 수 있다.
체육복을 빌리고 가져오는 것을 한 배열에 넣어서 생각하면 쉽다. 도난과 빌리는 것도 다 ++ -- 써서... 절댓값으로 = 1 이런식으로 하면 도난당했는데 여분 가져오는 것 이런 것을 확인하기 힘들다. 머리가 많이 굳었나봐ㅜㅜ 왜 오래 생각했을까?
너무 사짜로 푼 것 같은 이 기분. 그냥 반복문이랑 switch case문 써서 모든 경우를 구해주면 된다. 더 효율적인 방법이 있나?굳이 주의해야할 점이라면 1개 번호가 일치하는 경우에도 꼴찌이기 때문에 이러한 경우를 별도로 생각하여 등수를 구해줘야한다는 것이다.
int의 오버플로우를 주의하자.
덱(사실 스택을 쓰는 것이 더 좋아보인다)을 사용해서 문제를 풀었다. 덱에는 연속되지 않은 숫자만 push 해주면 된다. 같지 않은 숫자면 넣어주고 아니면 아니고!
BFS 연습용 문제, 시간 초과 때문에 꽤 고생했다. 단 한 줄 때문인지를 모르고visited를 다시 false로 초기화해 주니까 상대팀 진영에 도달하지 못하는 경우 무한루프에 빠지게 되어 시간 초과가 발생했다. 계속 갔던 길을 왔다갔다 해버리기...
map을 쓰는 해시 문제인데 그냥 비교해서 풀었다.sort를 이용하면 O(logN)이므로 for문 2개 O(N^2)보다 적은 시간 복잡도를 가진 비교를 할 수 있다.
인터넷 많이 참고해서 풀었다. 아무리 생각해도 모든 경우를 다 비교하는 것은 너무 효율성이 떨어지고 하나하나 자릿수를 다 비교하기에도 너무 아닌 것 같았기 떄문이다.
토스 코테 문제에서 나왔던 문제이다.이상하다 풀었던 문제 같은데... 했더니 백준에 패션왕 신해빈이 비슷한 문제였다! 다시는 까먹지 않으리
백준 괄호 문제와 같은 문제로 정말 기초 스택 문제다.
회전이 가능하므로 더 큰 부분을 배열 앞에 저장시켜서 문제를 풀면 된다.내가 생각해낸 방법인데 다른 사람들도 다 이렇게 푸셨더라고 국룰!
인터넷 열심히 봤다...ㅋㅋ 왜냐하면 에라토스테네스의 체는 아는 알고리즘이라 생각해내기는 쉬웠는데 모든 경우에 대한 숫자를 구하는 방식이 생각이 안났기 떄문이다. DFS/BFS로 순회하면서 찾기에는 너무 불필요한 것 같았다.
마땅한 수학적 사고가 생각이 나지 않아서 인터넷을 참고하여 풀었다.전체 블록 수를 가지고 내부에 해당하는 블록수를 역으로 생각해내다니 너무 똑똑함...생각할 때는 정말정말 안 풀렸는데 한 번 해결법을 아니까 또 엄청 짧은 코드로 해결할 수 있네 허무하다.
은근 쉬웠는데 너무 어렵게 생각해서 좀 헤맸다.if 문 안에 if 문을 작성해서 해당 프린트보다 우선순위인 프린트가 없을 때 location이 같으면 출력해주면 되었는데 혼자 무슨 && 쓰고 쌩쇼했었다... 왜 굳이 그랬었지 이해가 안간다.아무튼 해결!
엘지 전자 코테에서 이것을 응용한 비슷한 문제가 나왔다.그때는 한 20% 맞춘듯... ㅋㅋㅋ 어떻게 코테 붙었는지 모르겠다.이 문제의 핵심은 num개의 숫자를 고른다는 것과앞에서부터 k개씩 탐색해서 그 중 가장 큰 것을 골라서 배치한다는 것이다.
이런게 그리디지,,, 한 3시간동안 '조이스틱' 문제 삽질하다가 (아무리 생각해도 그리디 문제 아닌 것 같음) 그래서 구명보트 문제를 대신 풀기 시작했다.그냥 정렬해서 제일 마른 사람이랑 같이 태울 수 있으면 태우고 아니면 구명보트를 혼자 타면 된다.
string -> int : stoi (헤더 파일 string 사용 필요)int -> string : to_stringstring도 clear 사용 가능벡터의 처음과 끝에 접근하려면 v.front(), v.end() 사용
toupper : 소문자 -> 대문자tolower : 대문자 -> 소문자
스택 문제인데 스택 안 씀.주의 사항은 3, 2 이렇게 변할때 1초라고 체크해야한다는 것이다.하지만 마지막 숫자는 또 안셈 요상한 문제.stack을 사용하는 코드도 있는데 너무 이해가 안간다...
두 수를 곱하고 더했을 떄 최솟값이 되려면 (최소) \* (최대) 가 되도록 벡터를 정렬시키면 된다. 쉬움!
은근 문자열 문제, string에 int를 저장하려면 to_string을 사용해야한다는 것을 잊지 말자.
피보나치 구하기는 재귀함수 호출 또는 dp 로 문제를 풀 수 있다.그래서 처음에는 간단한 재귀함수로 문제를 풀었는데 역시나 시간초과dp로 구하는 것이 맞다.
사람들 푸는거 보니까 엄청 복잡하게 풀었던데 흠 굳이 그렇게까지?그냥 1의 개수를 세면 되니까 진짜 그냥 이진수 변환하면서 1의 개수를 세면 된다.
이상하다 예전에 풀어본 문제 같은데 여기에 글을 안 썼나?아무튼 스택을 사용하는 문제, 기초적인 스택 문제인 괄호 닫기와 비슷한 문제이다.다르면 스택에 push 아니면 스택에서 pop
string의 첫문자와 마지막 문자를 이렇게 접근했는데굉장히 비효율적으로 코드를 짰다...