728x90

전체 글 115

[백준] 15649 | N과 M (1) [파이썬/python]

문제link: https://www.acmicpc.net/problem/156491부터 N까지의 자연수 중 M개를 중복 없이 골라 나열하는 법을 모두 출력하는 문제이다. 접근파이썬의 itertools 라이브러리를 활용하면 쉽게 계산할 수 있다. permutations()로 수열을 모두 구한 후 for문으로 순회하며 출력해주었다. 코드import sysfrom itertools import permutationsinput = sys.stdin.readlineN, M = map(int, input().split())l = [x for x in range(1, N+1)]P = permutations(l, M)for p in P: print(' '.join(map(str, p)))

알고리즘 2025.03.21

[백준] 2447 | 별 찍기 - 10 [파이썬/python]

문제link: https://www.acmicpc.net/problem/2447재귀함수를 이용하여 가운데가 공백인 문자열을 출력하는 문제이다. 접근N*N 사이즈 리스트를 만든 후, 재귀함수를 통해 가운데 부분을 공백 문자열로 바꿔 주었다.코드import sysinput = sys.stdin.readlineN = int(input())S = [['*' for _ in range(N)] for _ in range(N)]def makeStar(a, b, N): if N != 1: tmp = N // 3 for i in range(a + tmp, a + tmp*2): for j in range(b + tmp, b + tmp*2): S[..

알고리즘 2025.03.20

[백준] 33541 | 2025는 무엇이 특별할까? [파이썬/python]

문제link: https://www.acmicpc.net/problem/33541주어진 연도 후 가장 빠른 '특별한 해'를 출력하는 문제이다. 접근이 문제에서 제시하는 '특별한 해'는 연도의 앞 두 자리와 뒤 두 자리를 더한 후 제곱한 값이 원래 연도와 같은 해이다.특별한 해인 연도를 미리 리스트에 저장하여 사용했다. 코드import sysinput = sys.stdin.readlineyear = []for i in range(32, 100): x2 = i * i y = x2 // 100 + x2 % 100 if i == y: year.append(x2) X = int(input())Y = -1for y in year: if y > X: Y = ..

알고리즘 2025.03.19

[백준] 4779 | 칸토어 집합 [파이썬/python]

문제link: https://www.acmicpc.net/problem/4779입력값에 따른 칸토어 집합의 근사를 출력하는 문제이다. 접근이 문제에서는 입력값 개수를 미리 제시하지 않는다. 파일의 끝에서 입력이 멈추기 때문에 EOF 처리를 해야 한다. try~except문으로 해결했다. 칸토어 집합의 근사를 미리 리스트에 저장한 후, 인덱스로 찾아 호출하도록 했다. 코드import sysinput = sys.stdin.readlineA = ['-']for i in range(12): tmp = A[i] + ' '*len(A[i]) + A[i] A.append(tmp)while 1: try: N = int(input()) print(A[N]) except: ..

알고리즘 2025.03.19

[백준] 24060 | 알고리즘 수업 - 병합 정렬 1 [파이썬/python]

문제link: https://www.acmicpc.net/problem/24060주어진 의사 코드대로 병합 정렬을 진행할 때, 배열 A에 K번째로 저장되는 수를 구하는 문제이다. 접근병합 정렬 구현 후 배열 A에 숫자가 저장되는 횟수를 카운트하여 K번째 수를 구했다.정답은 맞혔지만 코드 효율성이 좋지 않은 것 같아 어떻게 하면 개선할 수 있을지를 추가로 생각해보았다. 현재 코드에서는 병합 정렬을 끝까지 진행하고 있는데, K번째 숫자만 구하면 되므로 값을 구한 후에 병합 정렬을 멈추고 값을 출력할 수 있도록 고치면 더 좋은 코드가 될 것 같다! 코드import sysinput = sys.stdin.readlinedef merge_sort(A): if len(A)

알고리즘 2025.03.18

[백준] 25501 | 재귀의 귀재 [파이썬/python]

문제link: https://www.acmicpc.net/problem/25501문자열의 팰린드롬 여부와 팰린드롬 여부를 확인하기 위해 재귀함수를 호출한 횟수를 출력하는 문제이다.(C, python, JAVA의 경우 문제 페이지에서 팰린드롬 여부를 확인하기 위한 함수 코드를 제공하고 있기 때문에 복사해서 이용할 수 있다.) 접근본문에 제시된 함수에 재귀함수 호출 횟수를 확인하기 위한 변수 cnt를 추가하여 문제를 해결했다. 코드import sysinput = sys.stdin.readlinedef recursion(s, l, r, cnt): cnt += 1 if l >= r: return 1, cnt elif s[l] != s[r]: return 0, cnt else: return ..

알고리즘 2025.03.18

[백준] 20920 | 영단어 암기는 괴로워 [파이썬/python]

문제link: https://www.acmicpc.net/problem/20920입력받은 영단어 중 길이가 M 이상인 것들을 다음 우선순위에 따라 정렬하여 출력하는 문제이다.자주 나오는 단어일수록 앞에 배치한다.해당 단어의 길이가 길수록 앞에 배치한다.알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다 접근길이가 M 이상인 단어만 list에 저장한 후, collections의 Counter를 사용해 각 단어의 빈도를 계산했다.Counter로 빈도를 계산해 딕셔너리처럼 사용할 수 있다.그 다음, 우선순위에 따라 정렬하여 출력했다. lambda식을 이용한 것이 코드 간소화에 도움이 되었다. 코드import sysfrom collections import Counterinput = sys.stdin.rea..

알고리즘 2025.03.17

[백준] 26069 | 붙임성 좋은 총총이 [파이썬/python]

문제link: https://www.acmicpc.net/problem/26069 접근파이썬의 set를 이용했다. 무지개 댄스를 추는 사람의 집합 S를 만들고, 새롭게 만난 사람들 기록과 교집합이 있을 경우 새로 만난 사람도 집합 S에 추가하도록 했다. sys.stdin.readline()을 이용했을 때 개행문자가 포함되는 문제가 있어 .strip() 추가로 해결했다. 코드import sysinput = sys.stdin.readlineN = int(input())S = set(['ChongChong'])for _ in range(N): tmp = set(input().strip().split(' ')) if tmp & S: S = S.union(tmp) print(l..

알고리즘 2025.03.17

[백준] 25192 | 인사성 밝은 곰돌이 [파이썬/python]

문제link: https://www.acmicpc.net/problem/25192채팅방 유저들은 새로운 사람이 들어온 후 처음 채팅을 입력할 때 곰곰티콘을 사용한다. (이외에는 곰곰티콘이 사용되지 않는다.) 곰곰티콘이 사용된 횟수를 구하는 문제이다. 접근파이썬의 set가 중복된 원소를 갖지 않는다는 성질을 이용해 코드를 작성했다. 닉네임이 입력되면 집합에 추가하고, ENTER가 입력되면 집합의 길이를 cnt에 더한 후 집합을 초기화한다. 코드import sysinput = sys.stdin.readlineN = int(input())S = set()cnt = 0for _ in range(N): tmp = input().strip() if tmp == 'ENTER': cnt += l..

알고리즘 2025.03.17
728x90