728x90

python 107

[백준] 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

[백준] 1010 | 다리 놓기 [파이썬/python]

문제link: https://www.acmicpc.net/problem/1010서쪽의 사이트(N개)와 동쪽의 사이트(M개)를 연결하는 다리를 다리끼리 교차하지 않는 선에서 최대한 많이 지으려고 할 때, 그 경우의 수를 구하는 것인데(여기에서 N≤M 이다), 사실상 mCn을 구하는 것과 같다. 다리끼리는 겹쳐질 수 없기 때문에, 동쪽의 사이트 M개 중 다리를 지을 사이트 N개를 고르기만 하면 골라진 사이트가 서쪽의 어떤 사이트와 연결될지는 자동으로 정해진다. 접근조합을 계산하는 공식대로 코드를 작성했다. 분자끼리 곱하고 분모끼리 곱한 후 분자에서 분모를 나눈 값을 출력하도록 했다. 코드import sysinput = sys.stdin.readlineT = int(input())for i in range(T..

알고리즘 2025.03.16

[백준] 11050 | 이항 계수 1 [파이썬/python]

문제link: https://www.acmicpc.net/problem/11050입력받은 값으로 이항 계수를 구하는 간단한 문제이다. 접근어려울 것 없이, 이항 계수를 구하는 공식을 고려하여 코드를 짰다. 분자를 곱하고 분모를 곱한 후 분자에서 분모를 나누도록 했다.처음에는 코드를 이렇게 짰는데…결과는 성공이었지만 코드가 어딘가 지저분해 보였기 때문에 코드를 조금 고쳐 다시 제출했다.처음에는 연산 수를 줄이면 좋을 것이라는 생각에 K와 N - K를 비교하여 더 적은 값을 반영하는 코드(위 사진 5번 줄)를 작성했었는데, 그러든 말든 시간 복잡도는 여전히 O(N)이라는 것을 알고 해당 코드를 제거했다.또, for문을 두 개로 나눠 분자 값을 구하는 코드(위 사진 8번 줄)도 n*=i 형태로 고쳤다. 코드i..

알고리즘 2025.03.16

[백준] 28279 | 덱 2 [파이썬/python]

문제link: https://www.acmicpc.net/problem/28279 정수를 저장하는 deque를 구현한 후, 문제에서 제시되는 여덟 가지 명령을 입력에 따라 처리하도록 하는 문제이다. 접근deque는 양방향 큐를 의미한다. 양쪽 방향에서 자유롭게 push와 pop을 할 수 있다. 난 이 코드가 아닌 곳에서도 사용할 수 있는 형태의 deque를 만들고 싶었기 때문에 일부러 class Deque를 만들어 문제를 풀었다. 문제에서 제시되는 여덟 가지 명령을 메소드로 만들어 입력되는 숫자에 따라 처리하도록 했다.또, 초기에는 collections의 deque를 이용하지 않고 list를 이용해 구현했는데(그냥 직접 만들고 싶었음) 시간 초과 이슈로 deque를 사용하도록 고쳤다.input()을 이용..

알고리즘 2025.03.15

[백준] 24511 | queuestack [파이썬/python]

문제link: https://www.acmicpc.net/problem/24511 문제 내에 제시된 'queuestack'이라는 특정한 자료구조를 이용해서 제시된 원소를 넣었을 때의 리턴값을 출력하면 된다.  접근queuestack은 원소가 한 개인 큐 또는 스택의 나열이라고 보면 이해하기 쉽다.원소를 삽입할 때는 queuestack의 1번에 삽입할 원소를 push한 후 1번의 자료구조대로 pop하고 그 리턴값을 다음 번호에 넣는 동작을 반복한다.나의 경우 문제가 단번에 이해되지 않아서 그림을 그려 보았다. 문제 페이지에 적힌 queuestack 작동 구조를 단계별로 따라해보거나 문제 페이지의 예제 아래에 적힌 큐스택 내부 표현을 참고하면 문제를 이해하기 쉽다.(설명용으로 그린 그림이 아니라서 도움이 될..

알고리즘 2025.03.15
728x90