Search
Duplicate
🖥️

[PS] SFPC 기출문제 DNA 전사

생성일
2023/09/17 14:34
태그
프레첼쌤
PS
SFPC
파이쌤
10월의 PS 주제는 SFPC(School Friends Programming Challenge)의 기출 문제를 풀어보고자 합니다. 정보 선생님들이라면 한 번쯤 들어보셨을 수도 있는데요.
SFPC이란? 한국정보교사연합회 주관하여 2021년부터 진행해 왔던 프로그래밍 챌린지로 프로그래밍에 대한 진입 장벽을 낮춰 프로그래밍에 관심 있는 보통 학생이라면 누구나 프로그래밍으로 문제 해결을 할 수 있는 장을 제공하는 목적을 갖고 있습니다.
일반고 수준을 대상으로 중학생, 특목/특성화/자사고 등 학생뿐만 아니라 교사 및 예비 교원까지 참여할 수 있는 다양한 기회를 제공합니다. 올해도 마찬가지로 2024년 1월에 진행 예정이라고 하네요~ 많은 학생과 선생님이 참여할 수 있으면 좋지 않을까요?
SFPC의 지난 기출 문제와 정답은 아래 사이트에서 확인할 수 있습니다.

문제 설명

DNA는 4가지 염기 아데닌(A), 티민(T), 사이토신(C), 구아닌(G)으로 구성되고, RNA는 4가지 염기인 아데닌(A), 우라실(U), 사이토신(C), 구아닌(G)으로 구성된다.
DNA로부터 RNA가 만들어지는 과정에서 아래와 같이 대응되어 전사된다.
아데닌(A) → 우라실(U)
티민(T) → 아데닌(A)
사이토신(C) → 구아닌(G)
구아닌(G) → 사이토신(C)
DNA 염기서열이 입력될 때, 전사된 RNA 염기서열을 출력해 보자.
입력 설명
DNA (n) . 첫 번째 줄에 어떠한 DNA를 구성하는 염기의 개수가 입력된다. DNA . 두 번째 줄에 염기서열이 한 줄로 입력된다. (1 <= n <= 100000)
출력 설명
전사된 RNA의 염기서열을 한 줄로 출력한다.

문제 이해 및 분석

문제에서 해결하고자 하는 것은?
→ 입력된 DNA의 짝이 되는 RNA 값 출력
문제의 현재 상태와 목표 상태는?
현재 상태 : 어떤 DNA를 구성하는 염기의 개수가 정수의 형태로 입력되고 A, T, C, G로 이뤄진 문자열이 입력된다.
목표 상태: 전사된 RNA의 염기서열을 한 줄로 출력한다.

알고리즘 설계 및 프로그래밍 코드

num = int(input()) DNA = input() i=0 while(i<num): if(DNA[i] == 'A'): print("U", end="") elif(DNA[i] == 'G'): print("C", end="") elif(DNA[i] == 'C'): print("G", end="") else: print("A", end="") i = i+1
Python
복사

보너스 문제 서로 악수하는 경우의 수

A학교와 B학교 학생들은 함께 동아리 활동을 하기로 했다. 처음 만나는 자리에서 서로 협력하자는 의미로 악수를 하려고 한다.
악수의 규칙은 다음과 같다. [1] 학교 구분 없이 한 번씩 모두 악수를 해야 한다. [2] 서로의 팔이 엇갈리게 악수하지 않는다. [3] 악수를 하지 않은 사람이 없도록 악수한다.
예를 들면, 학생 수(n)가 2와 4일 때의 악수하는 경우는 아래 그림과 같다.
[입력] 악수를 하는 학생의 수, 짝수 입력
6
[출력] 조건에 맞게 악수하는 경우의 수
5

프로그래밍 코드

#include <stdio.h> int D[50]; int f(int n) { int temp = 0; if (n == 0) return 1; else if (n == 2) return A[2] = 1; else if (A[n] > 0) return A[n]; else { for (int i = 1; i < n; i += 2) temp += f(i - 1) * f(n - (i + 1)); return A[n] = temp; } } int main() { int n; scanf("%d", &n); printf("%d\n", f(n)); }
C
복사