코딩 테스트/백준22 [백준] (Swift) 11653번: 소인수분해 머리말 문제 링크 11653번: 소인수분해 이 문제를 선택한 이유 Swift 문법 연습(guard, nil coalescing) 풀이 풀이 순서 입력 받은 문자열 값을 정수 num으로 변환 나누어야 할 소수를 2로 초기화 num이 해당 소수로 나누어진다면, num을 소수로 나눈 다음 해당 소수를 한번 출력 3번이 해당하지 않으면 prime을 1 증가 3~4번을 반복하는 while 문 작성 스위프트 코드 import Foundation var num = Int(readLine() ?? "") ?? 0 var prime = 2 while num > 1 { guard num 2023. 7. 12. [백준] (Python) 12865번: 평범한 배낭 보호되어 있는 글 입니다. 2023. 7. 11. 백준) 1141번: 접두사 (Swift) 목차 머리말 문제 링크 1141번: 접두사 이 문제를 선택한 이유 구현 문제 연습 Swift 문자열 인덱스 접근 연습 풀이 n과 단어를 배열에 할당 첫 줄의 숫자를 정수로 변환하여 n으로 할당한다. 다음 줄부터는 n에 대한 반복문을 돌며 빈 배열에 하나하나씩 문자열을 추가한다. isPrefix 함수 우선 맨 아래 두 단어를 비교하여 한 단어가 다른 단어의 접두사인지를 판별하는 함수(isPrefix)를 만들었다. 두 단어 중 작은 값을 범위로 하여 문자열 인덱스를 접근하는데, 같은 값이면 카운트를 한다 카운트가 범위와 값이 같으면 접두사가 충족하기에 true를, 그렇지 않으면 기본값인 false를 리턴한다. 이중 반복문을 통한 인덱스 접근 두 단어를 조합하기 위해 이중 반복문으로 인덱스를 접근한다. isP.. 2023. 5. 29. [백준] (Swift) 11866번: 요세푸스 문제 0 머리말 문제 링크 11866번: 요세푸스 문제 0 이 문제를 선택한 이유 낯선 문제를 접했을 떄 적절한 반복문과 조건문을 사용하기 위함 구현 문제 연습 풀이 이 문제의 핵심은 배열의 인덱스가 초과할 때, 얼마만큼 처음의 인덱스로 돌아가서 인덱스를 구하는지이다. 나머지 연산자를 활용하여 배열의 길이만큼을 나눈 나머지를 구해 인덱스 초과를 방지한다 // 입력 var input = readLine()!.split(separator: " ").map { Int($0)! } // n, k 할당 let n = input[0] // 7 let k = input[1] // 3 // 배열 할당 var circle = Array(1...n) // 인덱스 초기화 var order = [Int]() var index = 0 .. 2023. 5. 26. [백준] (Python) A와 B 머리말 문제 링크 12904번: A와 B 이 문제를 선택한 이유 문제를 읽고 해석할 수 있는 능력(문해력) 반복문과 조건문을 적재적소에 활용하기 구현 문제 유형 연습 풀이 1) 잘못된 접근 방식 - 브루트 포스 처음에는 2가지의 연산이 존재하고 각각 결과론적으로 A를 추가하거나 B를 추가하거나 2가지이다. $n$ = (결괏값의 길이) - (초깃값의 길이)만큼의 경우의 수가 있으니 브루트 포스로 접근하면 되겠구나 싶었다. 결국 길이에 대한 2가지의 연산이므로 $2^{n}$을 생각하여 문제를 풀었다. # =================== 브루트 포스 -> 시간 초과 ===================== # S와 T 입력 input_string = input().strip() objective_string.. 2023. 5. 26. [백준] (Python) 7568번: 덩치 머리말 문제 링크 7568번: 덩치 이 문제를 선택한 이유 구현 문제 연습 반복문과 조건문을 적재적소에 활용하기 위함 풀이 몸무게와 키에 대한 표를 리스트의 요소로서 할당해야 한다. 여기서 몸무게와 키는 튜플로 묶어서 할당했다. 리스트의 요소를 반복하면서 현재의 요소를 1등으로 초기화한다. 자신을 포함한 다른 모든 요소를 비교하면서 자신보다 몸무게도 많이 나가고 키도 큰 사람이 있다면 나의 등수의 숫자의 크기를 늘린다. 여기서 자기 자신을 포함해도 4번의 조건에 해당하지 않기에 괜찮다. 4번에서 나온 등수를 공백 단위로 하나하나 출력한다. # 7568번: 덩치 # 실버 5 # # import sys # sys.stdin = open("input.txt", "r") # input = sys.stdin.re.. 2023. 5. 24. [백준] (Python) 1193번: 분수찾기 머리말 문제 링크 1193번: 분수찾기 이 문제를 선택한 이유 구현 문제를 푸는데 나에게 맞는 난이도를 조절하기 위해 평소보다 약간 느슨한 난이도의 문제를 골랐다. 스터디를 새로 만들었는데, 팀원이 알고리즘 문제가 익숙하지 않아서 같이 풀어 보기 위해서 너무 쉽지도, 어렵지도 않은 문제를 찾다 보니 선택하게 되었다. 풀이 1. 직접 예시를 입력해 보기 아래처럼 직접 순서를 써 보았다. """ row x numer/denom 1 1 1/1 2 2 3 1/2 2/1 3 4 5 6 3/1 2/2 1/3 4 7 8 9 10 1/4 2/3 3/2 4/1 5 11 12 13 14 15 5/1 4/2 3/3 2/4 1/5 """ """ 8은 4번 줄의 2번째이다 row 8 - 1 = 7 1 8 - 1 - 2 = 5 .. 2023. 5. 22. [백준] (Swift) 20546번 기적의 매매법 머리말 이 문제를 선택한 이유 - 구현 문제 연습 앨런(Allan)과 하고 있는 디코 월목 스터디에서 이번 달에는 구현과 문자열에 집중해 보기 위해 택했다. 알고리즘에 대한 이론보다는 나의 사고 과정을 코드로 옮기는 연습이 필요한 시기였다. 문제 링크 20546번: 🐜 기적의 매매법 🐜 풀이 매매 전략이 두 개이기에 각 전략에 대한 함수가 필요해 보였다. 매개변수는 공통적으로 현재 남아 있는 현금(budget)과 주식 차트의 배열(stockChart)을 설정했다. 현재 주식의 가격은 주식 차트의 배열(stockChart)에서 인덱스로 접근하기로 했다. 각 전략에서 필요한 전량 매수와 전량 매도에 대한 함수를 각각 만들었다. 단순히 변수와 연산자로 구현할 수도 있겠지만, 함수의 가독성을 위해 언제 사고파는.. 2023. 5. 19. [백준] (Swift/Python) 1213번: 펠린드롬 만들기 1213번: 팰린드롬 만들기 풀이 알파벳 26개를 인덱스로 갖는 배열 만들기 대문자 알파벳 26개만 입력값으로 주어지기에, 26개의 배열을 만들어 A부터 Z까지 각각 0~25의 인덱스로 설정하여 알파벳 개수를 요소로 설정한다. 따라서 Swift의 경우에는 asciiValue와 Unicode.Scalar를, Python의 경우에는 ord와 chr를 적절히 설정하여 알파벳에 해당하는 인덱스를 알맞게 접근해야 한다. 문자의 개수가 홀수인 문자는 0 또는 1이어야 한다. 펠린드롬에서 알파벳 개수가 홀수인 문자는 무조건 펠린드롬의 가운데 글자가 되어야 한다. 만약 개수가 홀수인 문자가 2개 이상이면, 해당 글자 모두 정가운데에 위치해야 하는데 그러면 펠린드롬이 성립할 수가 없다. 코드 Swift import Fo.. 2023. 5. 16. [백준] (Swift) N과 M (2) 15650번: N과 M (2) 📌 풀이 중복되지 않아야 하는 수열이므로 조합을 구현하는 문제이다. 그렇다면 조합을 어떻게 구현할까? 바로 백트래킹 알고리즘으로 구현하면 된다. 백트래킹(Backtracking) - DFS로 구현 1. 배열 2개를 만든다. 백트래킹의 진행 과정에 대한 배열 `sequence` 노드의 방문 여부에 대한 배열 `visited` 2. DFS 함수를 정의하여, Base Case와 Recursive Steps에 대한 알고리즘을 세운다. Base Case: 깊이의 끝에 도달했을 때 여태 쌓인 진행 과정을 원하는 형식으로 변환하여 출력 Recursive Steps: `N`만큼 반복하되, 방문하지 않은 노드이면 방문 처리를 하고 다음 노드에 대한 재귀함수를 호출한다. (조건문에 도달하지 .. 2023. 4. 30. 이전 1 2 3 다음 반응형