본문 바로가기

D39

[ SWEA ] D3 - 1493 수의 새로운 연산 - python 문제풀이 1493 수의 새로운 연산 접근법 : 규칙은 대각선, 각 대각선의 시작숫자와 끝 숫자는 규칙이 있음 => 내가 찾으려는 숫자가 몇 번째 대각선에 있을지 찾고 거기서 몇 번째 숫자인지 더해주면 됨 # d의 인덱스:값 = (idx-1)번째 대각선:끝숫자 d = [0] #속도 줄이려는 목적 - 예전 테케에서 계산한 적 있는 대각선이면 값만 찾아올것 def find(n): global d if n 2021. 7. 13.
[ SWEA ] D3 - 1221, 10912, 4676 - python 문제풀이 1221 GNS 접근법 : 딕셔너리에서 개수만 불러와서 순서에 맞춰 출력, join 활용 order = ["ZRO","ONE","TWO","THR","FOR","FIV","SIX","SVN","EGT","NIN"] for _ in range(int(input())): d = {"ZRO":0,"ONE":0,"TWO":0,"THR":0,"FOR":0,"FIV":0,"SIX":0,"SVN":0,"EGT":0,"NIN":0} tc,n = input().split() for num in input().split(): d[num] +=1 print(tc) for o in order: print(" ".join([o]*d[o]),end=" ") print() 10912 외로운 문자 접근법 : 정렬시켜놓고 idx를 마.. 2021. 7. 13.
[ SWEA ] D3 - 3499, 5162, 1206, 5356 - python 문제풀이 3499 퍼펙트 셔플 접근법 : 규칙은 절반 나눠 번갈아가면서 출력하기때문에 for문을 절반만 돌되 짝/홀수 조건만 잘 고려해서 출력 res = [] for tc in range(int(input())): n = int(input()) c = list(input().split()) r = [] for i in range(n//2): r.append(c[i]) if n%2==0: r.append(c[n//2+i]) else: r.append(c[n//2+i+1]) res.append("#{} {}".format(tc+1, " ".join(r) if n%2==0 else " ".join(r+[c[n//2]]))) print("\n".join(res)) 이 문제는 테스트케이스가 많아서인지 리스트에 담아 줄바꿈.. 2021. 7. 13.
[ SWEA ] D3 - 10804, 10200, 6692, 5789 - python 문제풀이 10804 문자열의 거울상 res = [] d = {"b":"d","d":"b","p":"q","q":"p"} for tc in range(int(input())): s = input() r = list(map(lambda x:d[x],s))[::-1] res.append("#{} {}".format(tc+1, "".join(r))) print("\n".join(res)) 10200 구독자 전쟁 테스트케이스가 많은지 매번 프린트하는것보다 마지막에 join으로 한번 하는게 훨씬 빠름 r = [] for tc in range(int(input())): N,P,T = map(int, input().split()) r.append("#{} {} {}".format(tc+1, min(P,T),P+T-N if N 2021. 7. 8.
[ SWEA ] D3 - 5515, 1208, 4466, 1229, 3142 - python 문제풀이 5515 2016년 요일맞히기 info = [31,29,31,30,31,30,31,31,30,31,30,31] r = {0:3,1:4,2:5,3:6,4:0,5:1,6:2} # 요일에 대응되는 숫자 for tc in range(int(input())): m,d = map(int, input().split()) print("#{} {}".format(tc+1, r[d%7] if m==1 else r[(sum(info[:m-1])+d)%7])) 1208 Flatten 접근법 : 정렬 -> 최대최소 차이비교 -> 반복 ... 만약 차이가 1과 같거나 작아지면 이제 의미 없는 블록 옮기기라 탈출 for tc in range(10): N = int(input()) blocks = sorted(list(map(int.. 2021. 7. 7.
[ SWEA ] D3 - 3456, 1209, 9700, 5549 - python 문제풀이 3456 직사각형 길이찾기 접근법 : 딕셔너리 활용 - 특히 defaultdict를 활용하면 매번 값이 있는지 확인할 필요가 없어서 편함 from collections import defaultdict for tc in range(int(input())): nums = list(map(int, input().split())) d = defaultdict(int) for num in nums: d[num] +=1 for k,v in d.items(): if v==1 or v==3: result = k break print("#{} {}".format(tc+1,result)) 또 다른 방법으로는 어차피 값을 3개만 들어온다는 것을 활용해서 - 3개가 모두 같을 때 vs 두 개만 같을 때의 경우를 활용해 구현.. 2021. 7. 6.
[ SWEA ] D3 - 1213, 1234, 1240, 3314, 4751 - python 문제풀이 1213 String 두 가지 접근법 - 방법 1 ) for문 돌면서 매번 체크 - 방법 2 ) 카운트 함수 활용 # 방법 1 - for문 돌면서 일치하는 첫 글자 나오면 확인하기 for tc in range(10): N = int(input()) target = input() sentence = input() result = 0 for i in range(len(sentence)): if sentence[i] == target[0]: if sentence[i:i+len(target)] == target: result += 1 print("#{} {}".format(N,result)) # 방법 2 - count 함수 활용 for tc in range(10): N = int(input()) target =.. 2021. 7. 2.
[ SWEA ] D3 - 1215, 1225, 1289, 10505 - python 문제풀이 1215 회문1 파이썬에서 회문 관련 문제는 슬라이싱을 사용하는게 빠르다 for tc in range(10): N = int(input()) cnt = 0 board = [list(input()) for _ in range(8)] # 가로 확인 board_rev = [[board[i][j] for i in range(8)] for j in range(8)] # 세로 확인 for row in range(8): for s in range(8-N+1): tmp = board[row][s:s+N] if tmp == tmp[::-1]: cnt += 1 tmp = board_rev[row][s:s+N] if tmp == tmp[::-1]: cnt += 1 print("#{} {}".format(tc+1, cnt)).. 2021. 6. 30.
[ SWEA ] D3 - 1217, 1230, 3431, 4406 - python 문제풀이 1217 거듭제곱 def mul(num,k): global n,cnt num *= n if k == cnt: return num return mul(num,k+1) for tc in range(10): N = int(input()) n,cnt = map(int, input().split()) print("#{} {}".format(N,mul(1,1))) 또 다른 방식 def mul(n,m): if m == 1: return n return mul(n,m-1)*n for tc in range(10): a = int(input()) b,c = map(int, input().split()) print('#{} {}'.format(a,mul(b,c))) 1230 암호문3 오래 걸리지만, 문제를 잘 이해하고 차근.. 2021. 6. 29.