문제 링크
문제 링크
문제 링크 코드 print() 자체에 줄 바꿈 있는 거 까먹지 말기!!
문제 링크
문제 링크 코드
문제 링크
문제 링크
문제 링크 코드
문제 링크 코드 python에 정렬 함수가 있다는 걸 까먹었다...
문제 링크
문제 링크
문제 링크좀 복잡한 게 푼 거 같다..다른 사람 풀이오, 1과 n을 조건문에 넣는 건 생각 못했다. 효율적인 코드를 짜기 위해 많이 노력해야할 것 같다.
문제 링크 풀이과정 코드
문제 링크 코드 풀이과정 가장 까다로웠던 게 최빈값이었는데 원래는 cnt라는 리스트에 각각 몇개 나왔는지 세어서 그걸 바탕으로 구해보려고 하다가 2개 이상일 때 두번째로 작은 수를 구하는 거에서 뇌정지가 와서 counter를 사용하였다. Counter와 most_c
처음에는 아래와 같이 이중 for문으로 풀었다.그리고 역시나 시간초과.. 흑흑.. 그래서 딕셔너리를 이용해 풀어보았다.무지성으로 풀지 말고 시간 초과를 최대한 줄일 수 있는 방법을 먼저 생각하고 풀어야할 것 같다..딕셔너리 넣는 방법 까먹어서 구글링했는데 이것도 조만간
문제 링크 풀이과정 일단 먼저 아래와 같이 for문을 돌면서 자기 자신과 1 외에 나누어 떨어지는 게 있으면 check 표시를 해 check가 0인 애들만 출력하는 식으로 코드를 작성했다. 그리고 결과는 시간초과,,,ㅠㅠ 코드
먼저 1부터 256까지의 타겟 높이로 쌓아야할 개수(mincount)와 없애야할 개수(maxcount)를 센 다음, maxcount+b보다 mincount가 더 큰 경우(없애는 블록+가지고있는 블록<쌓아야할 개수) 불가능한 것이므로 continue를 통해 뛰어넘고
처음에 틀렸습니다가 나와서 뭐지?했는데 찾아보니 python의 round는 사사오입이 아니라 오사오입 방식이라서 0.0000001을 더해야 사사오입(일반적인 반올림) 방식으로 계산할 수 있다는 것을 알았다.
먼저 tmp를 제거해야할 위치를 저장하는 변수로 두고 while문을 돌면서 (배열의 인덱스는 0부터 시작하므로) k-1씩 더해주었다. 이때 tmp의 값이 len(l1)보다 크다면, tmp = tmp % len(l1)을 해주어 인덱스를 벗어나지 않도록 했다. 그리고 wh
맨 처음에는 이중 for문으로 풀었는데 (역시나!!) 시간초과.. 그래서 해당하는 숫자가 있는지 없는지를 이분탐색으로 구현해서 풀었다
score 배열을 1로 초기화해서 만든 후 이중 for문을 돌면서 키와 몸무게 모두 작다면 해당 scorei에 1을 더해주는 식으로 구현했다.
python의 덱을 사용해 풀었다.
리스트에 저장할 때 나이, 이름, 순서 이렇게 저장하고 sort함수 내에서 key=lamda를 통해 나이와 순서를 기준으로 정렬시켰다.
문제 링크 코드
문제에서 주어진 벌집 그림을 살펴보니 두칸을 거치는 번호는 2~6, 3칸을 거치는 번호는 8~19 이길래 tmp+=6\*cnt라는 수식을 세울 수 있었다.
sum 함수 까먹지 말기
브루트포스로 풀었다.
문제 링크 코드
문제 링크 코드
문제 링크 코드
deque를 사용했다.
문제 링크 코드
모든 값이 같을 경우 row와 col의 초기값을 0으로 해두면 0 0이 나오는데 이는 유효하지 않은 인덱스이므로 row와 col의 초기값을 1로 해주어야 한다!아오 자바스크립트로 맨날 프로그래머스 문제만 풀어서 그런지 백준 풀 때마다 입력값 받는게 잘 안된다......
원래는 slice를 통해 2번째 줄부터 n+1번째까지를 배열에 저장하고 sort한 후 다시 for문을 돌면서 indexOf를 통해 indexOf의 반환값이 -1이 아닐 경우 result에 저장하는 식으로 구현했다. 그런데 slice나 indexOf, for문 때문에인지
문제 링크 풀이과정 JS 코드 Python 코드
문제 링크 코드
방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문해야하므로 그래프 정렬하는 거 잊지 말기~
문제 링크 코드
문제 링크 풀이과정 코드
문제 링크 풀이 python 코드 node.js 코드
적절한 곳에 괄호를 넣어서 가장 작은 수를 만드는 문제이다때문에 + 연산을 먼저하고 -를 하기 위해 먼저 -로 split을 해주고, +연산을 수행한 다음 -를 하는 식으로 구현했다.
A끼리 쌍을 짓고 B끼리 쌍을 지었을 때 이은 선이 겹치지 않는 단어를 좋은 단어라고 한다.스택을 이용해 스택 상단의 문자와 현재 문자가 같은 경우 pop하고, 마지막에 스택이 비었는지 확인하는 식으로 구현했다.
개인적으로 재밌었던 문제 ㅎㅎshift를 사용해 풀었는데 그러면 시간초과가 나서.. 찾아보니까 이렇게 인덱스 이용하는 것이 있어 이렇게 prev와 current를 이용해 풀었다.보충할 내용 : bfs를 왜 사용하는가?
너무 오랜만에 문제 풀어서 그런지 감이 잘 잡히지 않았다.이 문제는 다이나믹 프로그래밍을 사용하는 문제였는데.. 다이나믹 프로그래밍과 한발짝 떨어지게 된 기분 ㅋㅎㅋㅎㅋㅎ.. 앞으로 열심히 해야겠다.n과 k를 통해 이중 for문을 돌리면서 dp에 저장하는 방식으로 풀었
1개, 3개씩 가져가서 n이 홀수일 때는 SK, 짝수일 때는 CY가 이기게 된다.
언어제한으로 자바스크립트로 제출할 수 없어 python(PyPy3)으로 제출했다. 시간 제한이 조금 빡셌던 거 같다. 한번 틀렸었는데, all을 할 때 all이라는 리스트를 미리 만들어두고 하니까 얕은 복사가 되어서 아래와 같은 예제를 수행했을 때 잘못된 답이 나왔다.
문제링크 코드
원래는 rank라는 배열에 메달 비교해서 각 나라의 등수를 집어넣는 식으로 구현했는데 점점 까다로워지고,, 놓치는 것도 생기고 그래서.. 결국 아래 블로그 참고해서 풀었다... 나중에 다시 풀어봐야겠다..참고링크
문제링크 코드
Set을 사용하면 쉽게 풀 수 있는 문제였다.
랭킹 리스트의 모든 점수보다 작고, 랭킹 리스트가 다 차있지 않은 반례를 바로 생각하지 못했다. 앞으론 꼼꼼하게 케이스를 나눠서 테스트해봐야겠다.
문제링크 코드
문제링크 코드
이진 탐색으로 풀었다. 어떤 식으로 풀어야할지 감이 잡히지 않아서 밑에 힌트를 보고 풀었는데, 일주일 쯤 뒤에 다시 풀어봐야할 것 같다.
dp 문제다. 솔직히 말하면 제출하고 "이게되네.." 싶었다.... ㅋㅎㅋㅎㅋㅎㅋ 먼저 1로만 더해서(1+1+1+...+1) 만드는 경우를 고려해 저장할 dp 배열을 1로 초기화했다. i-2에 저장된 값에서 2를 더하고, i-3에 저장된 값에서 3을 더하면 i가 된다.
그냥 Number로 하니까 58점 밖에 받지 못했다. 문제 조건에서 각 거리와 리터당 가격이 최대 1,000,000,000 이하의 자연수라 Number의 범위를 벗어나는 게 문제였다. BigInt로 변경하니 100점이 나왔다.
시간초과가 조금 빡셌던 거 같다............. 처음에 객체를 활용해서 몇개 있는지랑 최소길이 만족하는지 보고 객체 for문 돌려서 그대로 list에 넣어서 sort한 다음에 다시 for문 돌면서 출력하는 식으로 구현했는데.. 이론상 4O(n)도 시간초과가 났다
단순히 수학 문제로 풀다가 반례가 나와서 밑의 힌트를 보고 풀었다.. 이진탐색을 어떤 경우에 써야하는지에 대해 제대로 정리되지 않은 거 같다. 관련해서 정리해야겠다.참고링크
시간이 0초 소요되는 순간이동(곱하기 2)의 우선순위를 우선으로 해주는 것을 생각하지 못해서 계속 시간초과에 걸렸다.....그리고 요소가 중복이 되더라도 거기까지 가는 시간이 다르니까 다른 것으로 봐야한다고 생각해서 처음에는 visited를 따로 안했는데 다시 생각해보
처음에 누적합을 사용하지 않아서 시간초과가 났었다. 무작정 풀기보단 더 효율적인 방법을 생각해보고 푸는 습관을 가져야겠다.
브루트포스로 풀었다. 현재 숫자와 입력리스트의 인덱스를 따로 저장해두고, 현재 숫자를 하나씩 쪼개서 for문을 돌면서 입력리스트\[인덱스]와 같은 게 있다면 인덱스를 하나씩 올리는 식으로 구현했다.예제 입력 2를 예로 들어 그림을 그려보면 아래와 같다.참고링크
한 단어에서 한 문자를 더하거나, 빼거나, 하나의 문자를 다른 문자로 바꾸어 나머지 한 단어와 같은 구성을 갖게 되는 경우에 비슷한 단어라 한다고 명시되어 있다. 하나의 문자라고 주어지므로, 비슷한 단어가 되는 경우를 정리해보면 아래와 같다.두 단어의 길이의 차가 1보
참고링크
재귀를 사용하는 DFS를 사용한 브루트포스 알고리즘(완전 탐색)으로 풀었다. 재귀를 통해 sum과 현재 인덱스(i, j), 지금으로 오기 위해 사용한 방법(before)을 넘겨주는 식으로 구현했다.
문제링크 코드
처음에 0과 1을 카운트해서 재배열 하는 식으로 했는데 재배열을 하면 안되고 자리 유지를 해야하는 문제였다.
Map을 사용해 시간복잡도를 줄이고 삭제로직도 편하게 구현했다.
BFS로 풀었다. shift()를 사용하면 시간초과가 나서.. 현재 first를 가리키는 index를 통해 큐의 FIFO를 구현했다.다른 풀이를 찾아보니 visited에 거리를 저장하는 방식으로 하시는 분도 계셨다. 신기방기.
A - B - C - D - E 인 관계를 찾는 문제로, depth가 4 이상인지를 판별하면 되는 문제이다.
BFS로 그래프를 돌면서 1과 -1로 색깔 배열을 채우는 식으로 구현했다. 처음에 방향 그래프인줄 알고 풀었다가.. 계속 틀렸는데 😭 무방향 그래프로 수정하니 통과했다..... 하.....
이중배열에 저장해둔 지도 정보를 양옆과 아래위를 탐색하는 방식으로 BFS를 사용해 풀었다.
백트래킹을 사용했다. 재귀를 사용해서 현재 depth와 m이 같다면 (m개의 수를 고른 것이니까) 출력해주고 return한다. 그리고 이전에(재귀로 들어가기 전에) 1로 바꾸었던 visited를 0으로 바꾸고 기존에 넣어둔 수를 pop하는 식으로 구현했다. (retur
순열의 뒤에서부터 오름차순이 끊기는 곳을 찾고 (편의상 끊기는 곳을 idx라 하자)해당 idx의 뒤에서 그 값보다 크지만 뒤의 리스트보다 가장 작은 아이를 찾아서 idx와 순서를 바꾸고 idx+1부터 끝까지 정렬을 시켜주는 식으로 구현했다. 참고Blog, \[백준 10
BFS를 이용해 풀었다.원래는 모든 점에서 시작해 BFS를 수행하는 식으로 구현했는데 너무 비효율적인 것 같아 찾아보니 시작점에서 뻗어나가는 식의 방법이 있어 해당 방법으로 문제를 풀었다.문제를 풀 때 index 접근관련해서 더 꼼꼼하게 살펴봐야 할 것 같다.BFS를
문제링크 풀이 코드
스택을 사용했다. 스택에 숫자와 인덱스를 넣어두고 현재 숫자보자 큰 값이 나올 때까지 pop 하고, 현재 숫자보다 큰 값이 나오면 다시 stack에 넣어두고 pop한 인덱스를 저장하는 식으로 풀었다.스택만 사용해서 문제 풀어본 건 처음이라.. 뭔가 신기방기
현재 위치에서 왼쪽에 있는 max와 오른쪽에 있는 max를 구하고, 그것의 min을 구하면 현재 위치에서 빗물이 고이는 세로가 된다. 해당 세로를 구한 후, 현재 높이가 세로보다 작을 때 빗물의 총량에 세로-현재높이를 더해주는 식으로 구현했다.
이분탐색인듯 이분탐색 아닌 것으로.. 풀었다. 투포인터인 것 같기도
DFS인듯 DFS 아닌 DFS로 풀었다. ㅋㅋㅋㅋ 맨처음에 4퍼에서 틀렸습니다가 나왔었는데, 결과 출력에서 정렬을 해주니 맞았다.
스택을 사용해 풀었다. stack에 문자들을 넣으면서 target의 마지막 문자와 똑같다면 스택의 마지막부터 target의 길이만큼을 pop하는 식으로 구현했다.
문제링크 풀이 코드
투 포인터를 사용해 풀었다. left와 right이라는 이름의 포인터에서 right을 늘려가면서 visited를 true로 바꿔주고, 해당 visited가 true라면 중복되는 수가 있는 것이므로 left를 늘려주면서 visited\[리스트\[left]]를 false로