728x90
반응형

알고리즘 94

[파이썬] BOJ_2605(줄 세우기)

문제 https://www.acmicpc.net/problem/2605 2605번: 줄 세우기 점심시간이 되면 반 학생 모두가 한 줄로 줄을 서서 급식을 탄다. 그런데 매일 같이 앞자리에 앉은 학생들이 앞에 줄을 서 먼저 점심을 먹고, 뒷자리에 앉은 학생들은 뒤에 줄을 서 늦게 점심을 www.acmicpc.net 해설 이 문제의 핵심은 뽑은 번호대로 그 위치에 줄을 선다는 것이다. 리스트의 insert()를 이용하면 특정 위치에 요소를 삽입할 수 있다. 번호의 순서가 제일 오른쪽이 가장 빠른 번호가 위치 하기 때문에 리스트를 역순으로 뒤집어서 출력해주면 끝이다. 코드 -파이썬 #백준 2605(줄 세우기) n = int(input()) #학생 수 num = [*map(int, input().split())..

알고리즘/백준 2023.06.11

[파이썬] BOJ_2810(컵홀더)

문제 https://www.acmicpc.net/problem/2810 2810번: 컵홀더 첫째 줄에 좌석의 수 N이 주어진다. (1 ≤ N ≤ 50) 둘째 줄에는 좌석의 정보가 주어진다. www.acmicpc.net 해설 SLLLLSSLL을 나눠서 보면 S / LL / LL / S / S / LL로 나눌 수 있다. S는 한 좌석에 컵홀더 1개, L은 두 좌석에 컵홀더 1개. 그렇다면 * / S* / LL* / LL* / S* / S* / LL* 로 표현할 수 있다. 결국 S는 1개당 컵홀더 1개 더해주면 되고, L은 L//2개당 컵홀더 1개를 더해주면 된다. 가장 왼쪽의 첫번째 컵홀더도 빼먹으면 안된다. 총 컵홀더의 개수를 구하고 나면 컵홀더와 사람 수 둘 중 작은 값을 출력해주면 된다. 문제에서 물어..

알고리즘/백준 2023.06.09

[파이썬] BOJ_2798(블랙잭)

문제 https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 해설 n장의 카드 중 3장을 더해 m을 넘지 않으면서 가장 가까운 수를 구하는 문제기 때문에 3중 반복문을 돌면서 한장씩 더하면 된다. 여기서 조심해야 할 것은 j는 i+1부터 돌아야 하고, k는 j+1부터 돌아야 한다는 것이다. 그렇지 않으면 똑같은 카드를 더하게 된다. 3장을 더한 값이 m보다 작거나 같으면 배열에 넣고 m을 넘지 않으면서 가장 가까운 수는..

알고리즘/백준 2023.06.01

[파이썬] BOJ_2644(촌수계산)

문제 https://www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어 www.acmicpc.net 해설 입력값을 받고 그래프를 생성하는 부분을 지나면 dfs 혹은 bfs로 문제를 풀어야 한다. dfs로 풀 때는 촌수를 cnt에 저장했다. 함수 한 번 씩 돌 때 마다 촌수가 1씩 올라간다. bfs로 풀 때는 deque를 이용하면 된다. 따로 촌수를 받을 필요는 없고 visited 변수에 현재 visited 값에 1촌을 더해서 저장해주면 된다. 처음 a를 1로 시작하는데 ..

알고리즘/백준 2023.05.30

[파이썬] BOJ_2309(일곱 난쟁이)

문제 https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 해설 9명의 난쟁이 중 2명이 가짜인 것이기 때문에 우선 난쟁이들 키의 합에서 2명씩 빼보면서 100이 되는 때를 찾으면 된다. 이중 반복문을 사용해 0번 인덱스와 1번 인덱스부터 두개씩 빼보면 된다. 찾은 경우 반복문 안에서 해당 i번, j번 인덱스를 제거하면 i번 인덱스가 항상 j번 인덱스보다 앞에 있어서 인덱스가 앞으로 하나씩 밀리는 경우가 생기기 때문에 인덱스를 따로 저장하고 반복문 밖에서 제..

알고리즘/백준 2023.05.27

[파이썬] BOJ_2231(분해합)

문제 https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 해설 분해합이 생성자 + 생성자의 각 자릿수이기 때문에 1부터 각 자릿수를 더해보면서 입력값 n과 같아지는 때를 찾으면 된다. 생성자가 여러개인 경우 가장 작은 생성자만 찾으라고 했으니 모든 생성자를 찾고 그 중에 가장 작은 수만 출력하는 것이 아니라 처음부터 가장 작은 생성자만 찾으면 된다. 1부터 시작이기 때문에 생성자를 찾으면 가장 작은 생성자가 되므로 그 ..

알고리즘/백준 2023.05.23

[파이썬] BOJ_8958(OX퀴즈)

문제 https://www.acmicpc.net/problem/8958 8958번: OX퀴즈 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수 www.acmicpc.net 해설 O가 연속해서 나오면 해당 문제의 점수는 연속된 O의 개수가 되기 때문에 다음 문제가 정답(O)인지 / 오답(X)인지 체크해야 한다. 쉽게 O의 개수를 체크하는 변수를 만들어 연속되면 +1을 해주고 그렇게 만들어진 변수의 값을 총 점수를 구하는 변수에 더해주면 된다. 코드 -파이썬 #백준 8958(OX퀴즈) n = int(input()) for i in range(n..

알고리즘/백준 2023.05.21

[파이썬] 프로그래머스_한 번만 등장한 문자

문제 https://school.programmers.co.kr/learn/courses/30/lessons/120896 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 set으로 s의 중복을 제거한 후 리스트에 넣어줬다. 그리고 그 리스트를 이용해 반복문을 돌면서 s에서 리스트의 각 원소의 개수를 세어 딕셔너리에 넣은 후, value값이 1인 key값만 answer 리스트에 넣어줬다. 사전 순으로 정렬된 값을 요구하고 있기 때문에 오름차순 정렬을 한 후 join을 이용해 문자열로 만들면 된다. 코드 -파이썬 def solution(s): answer..

[파이썬] 프로그래머스_인덱스 바꾸기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/120895 해설 num1과 num2의 문자를 바꿔야 해서 temp를 썼는데 그렇게 풀지 않아도 됐다.. 그냥 둘을 바꾸면 된다. def solution(my_string, num1, num2): string = list(my_string) string[num1],string[num2] = string[num2],string[num1] return ''.join(string) 이렇게.. 코드 -파이썬 def solution(my_string, num1, num2): string = list(my_string) temp = string[num1] string[num1] = string[num2] s..

[파이썬] 프로그래머스_문자열 계산하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/120902 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해설 split()을 사용하면 공백을 기준으로 문자를 나눠준다. answer에 미리 시작 숫자를 넣어놓고 i값이 연산자일 때만 맞는 계산을 하도록 해주면 답은 쉽게 구할 수 있다. 이렇게 안해도 문자열로 식을 입력하면 해당식을 실행한 결과값을 반환해주는 함수가 있다. def solution(my_string): return eval(my_string) 이렇게 해도 답을 구할 수 있다. 코드..

728x90
반응형