자료구조와 알고리즘/개인적인 코딩테스트 관련 풀이 60

[탐색][시뮬레이션] - 숫자만 추출(String)

문제 문자와 숫자가 섞여있는 문자열이 주어지고 그 중 숫자만 추출해 순서대로 자연수를 만든다. 첫 자리에 0이 오면 무시해준다. 추출한 자연수를 출력하고 다음 줄에 추출한 자연수의 약수 개수를 출력해준다. 문제 풀이 import sys sys.stdin = open("input.txt", "r") s = input() num = 0 cnt = 0 for i in s: if i.isdigit(): num = num * 10 + int(i) for i in range(1, num+1): if num%i == 0: cnt += 1 print(num) print(cnt) 반복문을 돌면서 해당 문자가 숫자인지를 확인하는 함수 isdigit( )을 사용해 숫자가 맞다면 해당 수를 자연수로 만들어주는 식을 사용해 자..

[탐색][시뮬레이션] - 회문 문자열 검사(String)

문제 주어진 n개의 수만큼 문자를 입력하고 그 문자가 회문인지를 판단하라 이때 대소문은 구분하지 않는다. 회문이란? 앞으로 해도 거꾸로해도 똑같은 것을 의미한다. like 이효리~!(이효이) 문제 풀이 - 1 import sys sys.stdin = open("input.txt", "r") n = int(input()) for i in range(n): s = input() s = s.lower() size = len(s) for j in range(size//2): if s[j] != s[-j-1]: print(f"#{i+1} NO") break else: print(f"#{i+1} YES") 문자열 길이의 절반만 검증하는 이유는 앞에서 뒤에서 같이 오기 때문이다. 해당 문자열 길이의 몫 값만큼만 반복..

점수 계산

문제 n개의 문제수를 제시한다. 해당 문제가 맞았을 땐 1 틀렸을 땐 0을 입력한다. 연속으로 문제를 맞췄을 땐 가산점을 부여한다. 예시 문제풀이 import sys #sys.stdin = open("input.txt", "r") n = int(input()) OX = list(map(int,input().split())) score = 0 extra_point = 0 for i in OX: if i == 1: extra_point += 1 score += extra_point else: extra_point = 0 print(score) 해당 문제가 계속되면 가산점에 +1씩 해준다. 해당 문제가 계속 맞추지 않았다면 가산점을 0으로 초기화해준다.

주사위 게임

문제 n명이 3번의 주사위를 돌려 가장 큰 금액을 받는 경우의 금액을 출력해라 같은 숫자 3개 나온 경우 = 10000 + (나온 숫자 * 1000) 같은 숫자 2개 나온 경우 = 1000 + (같은 숫자 * 100) 모두 다 다른 숫자 = 100 * (나온 수 중에 제일 큰 수) 문제풀이 import sys sys.stdin = open("input.txt", "r") n = int(input()) res = 0 for i in range(n): tmp = input().split() tmp.sort() #정렬한 문자를 숫자화 시켜서 mapping a,b,c = map(int,tmp) if a == b and b == c: money = 10000 + (a*1000) elif a==b or a == c..

뒤집은 소수

문제 n개의 숫자들 중 뒤집었을 때 소수인 수를 출력해라 isPrime 함수와 reverse 함수를 사용해서 문제를 풀 것 문제 풀이 import sys sys.stdin = open("input.txt", "r") def reverse(x): res = 0 while x > 0: t = x % 10 res = res * 10 + t x = x // 10 return res def isPrime(x): if x == 1: return False for i in range(2, x//2 +1): if x % i == 0: return False return True n = int(input()) a = list(map(int,input().split())) for i in a: now = reverse(i..

소수(에라토스테네스 체)

문제 N을 입력한 다음 1부터 N까지의 소수 개수를 출력하는 프로그램을 작성하라 만약 20이 입력된다면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개이다. 제한시간은 1초이다. 문제 풀이 import sys sys.stdin = open("input.txt", "r") n = int(input()) ch = [0] * (n+1) cnt = 0 for i in range(2, n+1): if ch[i] == 0: cnt += 1 for j in range(i,n+1, i): ch[j] = 1 print(cnt) ch라는 0으로 초기화한 리스트를 만들어 2의 배수 3의 배수 ... 해당 소수의 배수는 해당 소수가 약수이기 때문에 소수의 조건을 만족하지 않는다. 이런 규칙..

자릿수의 합

문제 n개의 숫자를 입력 받은 뒤 각 숫자의 자릿수를 더한 값이 가장 큰 값을 구하는 문제이다. digit_sum(x) 함수를 작성해서 문제를 풀 것 예 123 789 99 세 숫자가 있을 때 가장 큰 수는? 정답 789 문제 풀이 - 1 import sys sys.stdin = open("input.txt", "r") def digit_sum(x): sum = 0 while x > 0: sum += x % 10 x = x//10 return sum n = int(input()) a = list(map(int,input().split())) max = -2147000000 for i in a: now = digit_sum(i) if now > max: max = now result = i print(re..

정다면체

문제 두 개의 정다면체 주사위를 굴려 합을 구한 뒤 가장 많이 나온 합의 수를 찾아라 이때 합의 수의 index를 출력해야 한다. 문제 풀이 import sys #sys.stdin = open("input.txt", "rt") n, m = map(int,input().split()) cnt = [0] *(n+m+3) max = -2147000000 for i in range(1,n+1): for j in range(1, m+1): cnt[i+j] += 1 for i in range(len(cnt)): if max < cnt[i]: max = cnt[i] for i in range(len(cnt)): if cnt[i] == max: print(i, end=" ") cnt라는 해당 더한 값이 index로 해..

대표 값

문제 n명의 학생 점수 list 평균 값과 평균 값에서 가장 가까운 대표값의 index를 구해라. (평균 값은 소수에서 반올림 해라.) 단, 평균값과 가까운 값이 여러개 일 땐 더 큰 값을 대표값으로 해라. 또한, 평균값과 가까운 대표값의 중복일 땐 더 앞에 있는 값의 index를 출력해라. 문제 풀이 1 평균은 round( ) 함수와 sum( ) 함수를 사용해 구했다. 최솟값을 구할 땐 최솟값과 비교하며 값을 교환해 저장할 변수를 최대로 큰 값을 넣어 작업한다. arrMin = float('inf') 최댓값을 구할 땐 최댓값과 비교하여 값을 교환해 저장할 변수를 최소로 작은 값을 넣어 큰 값이 들어오면 변경될 수 있게 작업한다. 0을 기준으로 두고 작업해도 된다 index를 받아야 하기에 enumera..

k번째 큰 수

문제 저장된 리스트에 있는 1 ~ 100의 사이의 값을 가진 n개의 리스트에서 3개의 값을 뽑아 더한 뒤 k번째 큰 수를 찾는 문제 풀이 해설 3개의 값을 뽑아 더하는 과정이라면 3중 for문을 사용해서 모든 값을 더해준다. 이때 값의 중복은 허용하지 않기 때문에 set 자료 구조를 사용해 중복을 제거해준다. 다시 set을 list화 시켜 정렬을 한다. (이때 정렬은 내림차순이다.) 정렬 시킨 list에서 k-1 번째 값을 출력해준다. (k-1인 이유는 index가 0부터 시작하기 때문이다.) n, k = map(int,input().split()) card = list(map(int,input().split())) result = set() for i in range(n): for j in range(..