전체 글
-
[백준] 1080 - 행렬알고리즘 2023. 5. 8. 16:50
1. 문제 https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 2. 접근 1. 3 X 3의 행렬을 뒤집는다는것을 생각해서 overturn 함수의 3칸을 어떻게 처리할지를 많이 고민했다 ( 근데 간단하게 range를 (x,x+3) 이렇게 표현하면 된다...) ,, 처음에는 3X3처리에 대해서 막상 생각이 나지 않았었다 2. n
-
[백준] 1049 - 기타줄알고리즘 2023. 4. 20. 13:43
1. 문제 https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 2. 접근 1. m번동안 2개의 수들을 받는데, package 와 each (낱개) 로 구분해서 리스트에 넣어준다 2. n 의 개수가 6개 넘는지 넘지 않는지 먼저 확인해준다 3. 주의할점은 min(package) > min(each) * 6 이 가능하다는점을 고려해야 한다 ( 복사해서 에디터에 넣었을때 21번줄 ) 위 3번만 조심한다면 사고의 흐름대로 코드를 짜면 쉽게 풀수있다. ..
-
[백준] 1389 - 케빈 베이컨의 6단계 법칙알고리즘 2023. 4. 14. 17:24
1.문제 https://www.acmicpc.net/problem/1389 1389번: 케빈 베이컨의 6단계 법칙 첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻 www.acmicpc.net 2. 접근 1. 문제에서 n(node)과 m(edge)가 주워졌으며, 친구관계가 양방향이고 n의 범위가 500이하라는 점에서 플로이드를 떠올릴 수 있었다. 2. 친구가 연결되는 관계수가 적으며, 동일한 관계수일 경우에는 작은 인덱스 값을 뽑기 위해서 ( i -> j ) 이동하는 관계에서 cnt 변수에 더해져 가는 관계의 수를 더하고 그 값과..
-
[백준] 2417 - 정수 제곱근알고리즘 2023. 4. 9. 17:50
1. 문제 https://www.acmicpc.net/problem/2417 2417번: 정수 제곱근 정수가 주어지면, 그 수의 정수 제곱근을 구하는 프로그램을 작성하시오. www.acmicpc.net 2. 접근 1. 시간 제한이 0.4초여서 이분 탐색으로 풀어야 한다고 생각했다 ( 그게 아니라면 그냥 math를 쓰거나 ** 연산자를 사용하고 바로 끝낼것이다 ) 2. 0부터 주어진 n 까지를 범위로 생각해서 mid ** 2 값과 n값이랑 비교하면서 이분 탐색으로 돌리면 된다 3. 풀이 import sys input = sys.stdin.readline n = int(input()) def convert(n): return n ** 2 def binary(start, end): while start = n..
-
[백준] 1654 - 랜선 자르기알고리즘 2023. 4. 9. 17:47
1. 문제 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 2. 접근 1. 이코테를 풀어봤다면 ' 떡볶이 떡 만들기 ' 문제랑 유사하다 => 파라메트릭 서치! 2. n의 범위가 커서 이분탐색을 사용하면 된다 3. k개를 분할해서 n개의 '동일한 길이'의 랜선을 만들어야 하므로 start, end 를 길이에 대한 끝 점들의 값으로 설정해준다 4. 랜선들의 값들을 mid 값으로 나눠서 tot 값에 합산해 간다 5. 분할..
-
[백준] 1920 - 수 찾기알고리즘 2023. 4. 9. 17:41
1. 문제 https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 2. 접근 1. 기본적으로 이 문제는 정렬을 통해서 ( not in ) 으로 풀 수 있을거 같지만, 이분탐색으로 풀어보겠다 ( 비슷한 문제가 이코테에 실려있어서 이분탐색도 가능함을 알 수 있었다 ) 2. 주워지는 리스트는 정렬을 통해 이분탐색의 조건을 갖춰준다 3. 우리가 암기하고 있는 이분탐색의 코드를 작성하고, 값들을 for문을 통해 ..
-
[백준] 1431 - 시리얼 번호알고리즘 2023. 4. 7. 16:38
1. 문제 https://www.acmicpc.net/problem/1431 1431번: 시리얼 번호 첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어 www.acmicpc.net 2. 접근 1. 데이터를 받을 때 각 문자열 값 안에서 숫자의 합을 구해주는 함수를 구해준다. 2. 길이 -> 숫자의 합 -> 사전순 의 순서로 정렬을 해주기 위해 lambda 를 적용한다 3. 풀이 import sys input = sys.stdin.readline serial_num = [] for i in range(int(input())): serial_num.append(..
-
[백준] 1302 - 베스트 셀러알고리즘 2023. 4. 7. 15:59
1. 문제 https://www.acmicpc.net/problem/1302 1302번: 베스트셀러 첫째 줄에 오늘 하루 동안 팔린 책의 개수 N이 주어진다. 이 값은 1,000보다 작거나 같은 자연수이다. 둘째부터 N개의 줄에 책의 제목이 입력으로 들어온다. 책의 제목의 길이는 50보다 작거나 같고 www.acmicpc.net 2. 접근 1. ' 가장 많이 팔린 ' 여기서 Counter.most_common() 을 써도 될거 같다 라는 생각은 들었지만, 일반적으로 dictionary() 를 사용해서 풀어 봤다 2. dict() 을 생성해주고, key값에 book이 없다면 ( 아직 팔린적이 없다면 ) ' key:value ' 을 하나 만들어 주고, 있다면 value += 1을 해준다 3. value 값을..