본문 바로가기

Problem Solving41

[ 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 - 11688, 5431, 2805, 1228 - python 문제풀이 11688 Calkin-wilf tree 1 접근 : 문제를 읽자마자 트리형식, 재귀로 풀면 빠를 것 같다는 생각이 들어 바로 구현 - 문자열, 분모에 들어갈 수, 분자에 들어갈 수를 넘겨주고 문자열의 0번째로 조건 판별 - 재귀 종료 조건 : 문자열의 길이가 0일 때 == 더 이상 깊게 들어갈 필요가 없을 때 def tree(idx): global route,up,down if route[idx] == 'L': down = up+down else: up = up+down if idx == len(route)-1: return else: tree(idx+1) for tc in range(int(input())): route = list(input()) up, down = 1, 1 result = tree.. 2021. 7. 5.
[ SQL ] HackerRank Basic - MySQL 답안 정리(3) Higher than 75 marks SELECT NAME FROM STUDENTS WHERE MARKS > 75 ORDER BY SUBSTRING(NAME,-3,3),ID 개념 : Substring 활용 : Substring(문자열, 시작할 자리위치, 가져올개수) Employee Names, Salaries // Names SELECT NAME FROM EMPLOYEE ORDER BY NAME; // Salaries SELECT NAME FROM EMPLOYEE WHERE SALARY > 2000 AND MONTHS < 10 ORDER BY EMPLOYEE_ID; Type of Triangle SELECT CASE WHEN A+B 문자열을 합쳐줌 개념 : substring(문자열, 시작위치, 가져올개수.. 2021. 7. 2.
[ 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 - 1220, 1216, 5601, 10570 - python 문제풀이 1220 Magnetic 주의 - 답안이랑 내가 푼 답이랑 숫자는 비슷한데 값이 틀리다면 조건을 반대로 바꿔보면 된다... ㅎ 접근 - 생각보다 쉽고 다양한 방법으로 풀 수 있음 방법 1 : 이끌리는 방향의 가장 바깥에 있는 것들을 빼버린 뒤 시작 인덱스와 끝 인덱스만 검토하면서 직전값과 다르면 카운트를 올려주고 값을 갱신해주는 방식 방법 2 : 0을 다 지우고 "12"만 세어주는 방식(어차피 저 바뀌는 부분만 카운트하면되니까) # 방법 1 - 코드가 길다... for tc in range(10): N = int(input()) table = [list(input().split()) for _ in range(N)] cnt = 0 before = table[0][0] for i in range(N): s.. 2021. 7. 1.
[ 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.
[ SQL ] HackerRank Basic - MySQL 답안 정리(2) - Weather Observation Station Questions Weather Observation Station 01 ~ 05 // 01 SELECT CITY, STATE FROM STATION // 02 SELECT DISTINCT CITY FROM STATION WHERE ID % 2 = 0 // 03 SELECT COUNT(CITY) - COUNT(DISTINCT CITY) FROM STATION // 04 SELECT CITY, LENGTH(CITY) FROM STATION GROUP BY CITY ORDER BY LENGTH(CITY),CITY LIMIT 1; // 05 SELECT CITY, LENGTH(CITY) FROM STATION GROUP BY CITY ORDER BY LENGTH(CITY) DESC, CITY LIMIT 1; Weather Ob.. 2021. 6. 29.
[ SQL ] HackerRank Basic - MySQL 답안 정리(1) Revising the Select Query 1,2 SELECT * FROM CITY WHERE POPULATION > 100000 AND COUNTRYCODE = 'USA' SELECT NAME FROM CITY WHERE POPULATION > 120000 AND COUNTRYCODE = 'USA' Select All SELECT * FROM CITY Select By ID SELECT * FROM CITY WHERE ID = 1661 Japanese Cities' Attributes & Names SELECT * FROM CITY WHERE COUNTRYCODE = 'JPN' SELECT NAME FROM CITY WHERE COUNTRYCODE = 'JPN' 2021. 6. 29.
[ 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.
[ SWEA ] D2 - 1940, 1928, 1288, 1284, 1204 - python 문제풀이 1940 가랏 RC카 접근법 : 커맨드가 0이 아닐 경우에만 뭔가 계산을 해주고, 0일때는 바로 현재 속도만 더해주면 된다 for tc in range(int(input())): commands = int(input()) distance = 0 current_speed = 0 for _ in range(commands): info = input() if info != "0": #앞에서 1인지2인지도 비교안하고 빠질수있음 command = info.split(" ")[0] acceleration = int(info.split(" ")[1]) if command == "2" and current_speed < acceleration: current_speed = 0 elif command == "2": cu.. 2021. 6. 28.
[ SWEA ] D2 - 1954, 1948, 1946, 1945 - python 문제풀이 1954 달팽이 숫자 달팽이처럼 돌기 위해서는 오른쪽, 아래, 왼쪽, 위쪽 방향을 반복적으로 돌아가면서 이동해 들어가고, 그 빈도는 위 그림에서 볼 수 있듯이 각 n번에서 1번 순서대로, 처음을 제외하면 각각 2번씩 반복적이라는 규칙을 찾을 수 있다. for tc in range(int(input())): N = int(input()) snail = [[0]*N for _ in range(N)] number = 1 jump_cnt = N direction = 'right' # 'right','down','left','up'순으로 바뀔 것 row_idx,col_idx = 0,0 while number 2021. 6. 27.