전체 글
-
[알고리즘] 백준 - 1132 - 합알고리즘 2022. 11. 29. 19:39
1. 문제 2. 접근 1. 처음에는 dictionary 를 사용해서 계수를 구하여 문제를 풀었는데, 첫번째 자리에 나오는 alphabet은 0이 되면 안된다는 조건때문에 문제를 계속 틀렸다 ( 특정 알파벳을 다 쓰지 않는 예시들은 맞을 수 있으나, 알파벳을 다 쓰는 예시는 틀린다 ) 2. 그래서 구글링을 통해 안 점은 first 배열을 만들고 A - J 순서로 0을 채우고, 반복문을 돌리며 첫번째 알파벳을 보고 배열에 체크를 하는 것이다. 3. 그리고 역순으로 정렬해서 거꾸로 체크해가며 9부터 대입하여 문제를 푼다 3. 풀이 n = int(input()) arr = [[0, 'A'], [0, 'B'], [0, 'C'], [0, 'D'], [0, 'E'], [0, 'F'], [0, 'G'], [0, 'H'..
-
[알고리즘] 프로그래머스 - 정수 삼각형알고리즘 2022. 11. 22. 14:57
1. 문제 2. 접근 0,0 -- -- -- -- 1,0 1,1 -- -- -- 2,0 2,1 2,2 -- -- 3,0 3,1 3,2 3,3 -- 4,0 4,1 4,2 4,3 4,4 1. 특정 칸에 올수 있는 것은 바로위와 위의 왼쪽이다. -> ( (2,1) 에 올 수 있는값은 (1,0) 와 (1,1 ) 이다 ) 2. 내려온 값 + 원래 있던값 -> ( (2,1) 에 올 수 있는값은 => (2,1) + max( (1,0) ,(1,1 )) 이다 ) 3. 맨 마지막 줄에서 가장 큰값을 출력하면 된다 * left_ up , up 구별은 2중 for문에서 2번째 반복문의 값이 0 이면 left_up, i == j 이면, up 이다 3. 풀이 # 정수 삼각형 import sys input = sys.stdin.r..
-
[알고리즘] 백준 주사위 - 1041알고리즘 2022. 11. 15. 11:10
1. 문제 2. 접근 1. n =2, 3, 4 .. 이렇게 그리다보면 우리는 낮은 숫자 3개만을 사용한다는 사실을 알 수 있다 2. n == 1 일때는 그 주사위에서 가장 큰 값을 제외하고 나머지 값들의 합을 구하면 된다 3. n >=2 일때는 가장 낮은 값은 몇개가 나올지, 2번째 낮은값을 몇개가 나올지 , 3번째로 작은 값을 몇개가 나올지 를 구하면 된다 4. 3번째로 낮은 값은 항상 모서리 의 맨 위의 값만 가능하므로 4개고, 나머지 2개는 주석처리 해봤다 -> 그림을 그려서 주석을 이해해보는것을 추천해본다! 3. 풀이 import sys input = sys.stdin.readline # 주사위 갯수 n^3 n = int(input()) data = list(map(int, input().spli..
-
[알고리즘] 백준 1966 - 프린터 큐알고리즘 2022. 11. 9. 16:34
1. 문제 2. 접근 1. 문제의 제목 처럼 큐를 사용해야한다 1 - 1. 큐는 deque 혹은 list를 이용한 큐 방식을 사용하면 된다 2. 주의 할점은 m의 위치에 있는 target 값이다 2 - 1. 테스트 케이스의 마지막 번호와 같이 같은 수들이 있을때는 같은 값으로 인지해 정답을 결정해 버리기 때문이다. 3. 따라서 m 의 값을 -1 씩 해주고 m == 0 일 경우 출력되는게 아니라면 m = len(q) - 1 을 해준다 3 - 1. -1 을 해주는 이유는 인덱스가 0부터 시작이기 때문이다. 3. 풀이 # 프린터 큐 import sys input = sys.stdin.readline for _ in range(int(input())): # 개수, 뽑고 싶은 유인물 위치 n, m = map(in..
-
[알고리즘] 백준 선긋기 - 2170알고리즘 2022. 11. 4. 13:35
1. 문제 2. 접근 1. 처음에는 선을 오름차순 정렬을 해서, 총길이에 집중하고 끝나는 부분과 그 다음 선의 시작 부분에 대해서만 판단을 했단 2. 그런데 생각해보니까, 선들의 끝나는 부분을 기준으로 다음 선의 시작과 끝 중 위치한곳을 판단하면 될거 같았다. 3. for문으로 이전 선의 끝나는 부분을 체크하고 이전 선이 다음선의 시작보다 먼저 끝나면 시작과 끝을 재설정해준다 3. 풀이 틀린 풀이 import sys input = sys.stdin.readline n = int(input()) line = [] for i in range(n): # x y 지표로 리스형식으로 들어감 -> 2차원 배열 line.append(list(map(int, input().split()))) line.sort() to..
-
[알고리즘] 백준 1300 - K번째 수알고리즘 2022. 11. 4. 10:26
1. 문제 2. 접근 1. 처음에는 a에 대한 2차원 배열을 만들어서 2차원 배열에 값들을 넣어주고, b리스트안에 2차원 배열을 sum(a, [] ) 라는 메소드로 1차원 배열을 만들어서 해결하려고 하니 메모리 초과가 나왔다. 2. 그래서 이분 탐색을 사용하였다. 3. 가장 중요한 부분이 임의의 수 a보다 작거나 같은 개수를 구하여야 하고, 각 행은 구구단 처럼 나타나기에 ( a / 행번호 ) 가 그 행에서 구하고자 하는 값이 된다, 단 ( a / 행번호 ) 가 n보다 크면 그 값은 n임을 알아야 한다 3. 풀이 import sys input = sys.stdin.readline n = int(input()) k = int(input()) a = [[1] * n for _ in range(n)] for ..
-
[알고리즘] 백준 1135 - 뉴스 전하기알고리즘 2022. 11. 3. 17:17
1. 문제 2. 접근 * 본인이 한번에 문제를 이해도 못하고 못풀어서 다른 사람의 풀이를 참고해서 풀었습니다 1. 트리에 대한 구조를 만든다 ( 비워져 있는 2차원 배열 ) 2. 트리에 입력받은 데이터들을 0 ~ n-1 인덱스에 1 ~ n 까지의 정보들을 넣어준다 3. go 함수 안에서 먼저 leaf 노드까지 쭉내려가서 leaf node에서의 시간을 0이라고 지정해주기 4. 다음 자식 노드가 있다면, 자식 노드에 대해서도 leaf까지 내려가게 함수 재사용하기 5. 자식 노드까지의 걸리는 시간을 새로운 리스트(child_node) 안에 넣어준다 6. 새롭게 만든 리스트를 내림차순으로 정리하고 현재까지 걸린 시간 + 현재 처리시간을 넣고 최대값을 뽑아 출력한다 3. 풀이 import sys input = s..
-
[알고리즘] 카드 정렬하기 - 백준 1715알고리즘 2022. 11. 2. 18:12
1.문제 2. 접근 1. 처음에 받는 데이터들을 heap에 넣어서 차순 정렬을 한다 2. 받은 데이터들의 더해진 값들에 대한 리스트를 만들어준다. 3. 2번째 만든 데이터들의 합을 구하여 출력한다 처음부터 같은 생각을 가지고 문제를 풀었다. 솔직히 처음 문제 풀이에 대해서 아직 뭐가 틀린지 잘 모르겠다. 하여튼, 주어진 수들의 합을 새로운 공간에 넣고 새로운 리스트의 원소들의 합을 구한다는 생각으로 풀었다 3. 풀이 처음에 틀린 풀이 # 카드 정렬하기 import sys input = sys.stdin.readline n = int(input()) data = [] for i in range(n): data.append(int(input())) res = [] data.sort() res..