본문 바로가기

분류 전체보기885

C언어 10제] 2015년 한국정보올림피아드 시˙도 지역본선 초등부 문제. 쇠막대기 문제] 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저의 배치는 다음 조건을 만족한다. - 쇠막대기는 자신보다 긴 쇠막대기 위에만 놓일 수 있다. - 쇠막대기를 다른 쇠막대기 위에 놓는 경우 완전히 포함되도록 놓되, 끝점은 겹치지 않도록 놓는다. - 각 쇠막대기를 자르는 레이저는 적어도 하나 존재한다. - 레이저는 어떤 쇠막대기의 양 끝점과도 겹치지 않는다. 아래 그림은 위 조건을 만족하는 예를 보여준다. 수평으로 그려진 굵은 실선은 쇠막대기이고, 점은 레이저의 위치, 수직으로 그려진 점선 화살표는 레이저의 발사 방향이다. 이러한 레이저와 쇠막대기의 배치는 다음과 같이 괄.. 2021. 10. 4.
C언어 9제] 깊이 우선 탐색(DFS) 이용한 프로그램 구현하기 출처] 반크 독도포스터 깊이 우선 탐색이란? (참고 : DFS) 문제] 길이 8m의 막대를 3명이서 1m단위로 자를려고 할 때 몇 번이면 1m 막대가 될 수 있는지 프로그램을 작성하시오.(단, 하나의 막대는 한 사람만 자를 수 있다.) 8 -> 4, 4 로 자른다 1명 4, 4 -> 2, 2, 2, 2로 자른다 2명 2,2,2 -> 1,1,1,1,1,1로 자른다 3명 2 -> 1,1로 자른다 1명 그러므로 총 4번을 자르면 8m 막대가 1m막대로 만들수 있게 된다. 입력 예시1] 20, 3 출력 예시1] 8 입력 예시1] 100, 5 출력 예시1] 22 참고풀이] #include //x : 최종 막대기 총수 //y : 막대기를 자를 인원수 //count : 현재 자를 막대기 개수 int Jarki_DFS.. 2021. 9. 30.
깊이 우선 탐색(Depth First Search, DFS) 그래프 탐색 방법 중의 하나로서 한 정점을 방문한 후에 그에 인접하고, 아직 방문하지 않은 한 정점을 선택하여 이로부터 다시 위 과정을 반복하는 방법. 한 노드를 시작으로 인접한 다른 노드를 재귀적으로 탐색해가고 끝까지 탐색하면 다시 위로 와서 다음을 탐색하여 검색한다. 깊이 우선 탐색은 백트랙이라고도 하며 이 탐색을 사용하면 메모리 사용량을 줄일 수 있다. 출처] 한국정보통신기술협회 : 깊이 우선 탐색 네이버_컴퓨터인터넷IT용어대사전 : 깊이 우선 탐색 대한민국의 아름다운 영토, 독도의 여름 2021. 9. 30.
시분할 다중 접속(Time Division Multiple Access, TDMA) 하나의 전송 용량을 다수의 사용자가 시간을 배정받아(TD) 접속하는 다중 접속(MA) 방식. 다중 접속은 위성 통신에서 다수의 지구국이 하나의 위성 중계기의 전송로 용량을 분할 사용하거나, 이동 전화에서 다수의 이동국이 하나의 기지국의 전송로 용량을 분할 사용해서 상호 통신하는 방법으로 주파수 분할 다중 접속(FDMA), 시분할 다중 접속(TDMA), 부호 분할 다중 접속(CDMA) 등이 있다. 위성 통신 TDMA 방식에서는 하나의 중계기로 다수의 지구국이 모두 동일한 주파수대를 사용해서 시간적으로 중복되지 않도록 분할, 할당된 시간 슬롯 내에 디지털 신호를 버스트(burst) 형태로 단속적으로 송출한다. 각국으로부터 송출된 신호는 중계기에서 시분할되어 전송되는데, 수신국에서는 이 신호를 복조해서 할당된.. 2021. 9. 27.
Python 22제] 파워 유저를 위한 파이썬 EXPRESS] p180 CHAPTER 4. 도전문제 문제] 1) p180 산수 문제 프로그램 참고하세요. 2) 덧셈 뿐만 아니라 뺄셈 문제도 출제할 수 있도록 프로그램을 수정하라. 3) 한 번이라도 맞으면 반복을 종료하도록 프로그램을 수정하라. 참고풀이] import random flag=True while flag: x=random.randint(1,100) y=random.randint(1,100) c=random.randint(1,2) if c==1: answer=int(input(f"{x} + {y} = ")) else: answer=int(input(f"{x} - {y} = ")) y*=-1 if answer==x+y: print("잘했어요!!") flag=False else: print("틀렸어요. 하지만 다음번에는 잘할 수 있죠?") 참고풀이.. 2021. 9. 24.
최적화(optimization) 출처 : 반크 독도포스터 실행 시간 또는 필요로 하는 기억 용량에 관하여 효과가 좋은 프로그램을 생성하는 데 필요한 처리. 부호 최적화라고도 한다. 크게 기계에 독립적인 것과 의존하는 것으로 나뉜다. 전자에는 상수(常數)에 관한 계산을 하는 것과 같은 컴파일할 때의 계산, 공통항이나 공통식이 하나의 블록 내에 여러 번 나타날 때 하나만 계산하여 그 결과를 다른 것에 대입함으로써 공통 부분을 삭제하는 것, 루프 중 불변 부분은 루프 밖으로 이동하는 등의 루프에 관한 것, 데이터 플로 해석을 쓰는 것, 논리식을 최적화하는 것 등이 있다. 후자의 기계 의존적인 것에는 기계 명령의 불필요한 부분을 생략하거나 여러 개의 레지스터가 있을 때 레지스터의 할당을 고려하는 것 등이 있다. 출처] 한국정보통신기술협회 : .. 2021. 9. 23.
Python 21제] 파워 유저를 위한 파이썬 EXPRESS] p170 CHAPTER 4. 도전문제 문제] n-각형의 len길이 만큼 변의 길이를 입력받아 그리는 프로그램을 작성하시오. 참고풀이] import turtle t=turtle.Turtle() t.shape("turtle") #원하는 각형을 입력받는다. s=turtle.textinput("","몇 각형을 원하시나요?") n=int(s) lenStr=turtle.textinput("","한변의 길이를 입력하시오?") len=int(lenStr) t.penup() t.goto(-100,-100) t.pendown() for i in range(n): t.forward(len) t.left(360/n) turtle.mainloop() 참고풀이 결과] 대한민국의 아름다운 영토, 독도의 가을 2021. 9. 17.
C언어 8제] 2020년도 한국정보올림피아드 1차 대회 초등부 2교시 문제2. 피자 오븐 출처 : 반크 독도포스터 문제] 피자를 구워주는 전자식 오븐이 있다. 이 오븐에 재료를 넣어 정확히 N분 동안 동작을 시키고자 한다. 그런데 이 오븐에 준비된 버튼(button)은 아래 그림과 같은 동작을 하는 5가지이다. 즉, 각각의 버튼은 동작 시간을 추가시키거나 감소시킨다. 버튼들의 기능을 하나하나 설명하면, 60분을 증가시키는 ADDH버튼, 10분을 증가시키는 ADDT버튼, 10분을 감소시키는 MINT버튼, 1분을 증가시키는 ADDO버튼, 1분을 감소시키는 MINO버튼이 있다. 시간을 감소시키는 버튼을 눌러서 시간이 0분보다 작아지는 경우는 0분으로 세팅된다. 처음에 피자 오븐의 첫 시간은 0분으로 정해져 있다. t가 현재 오븐에 세팅된 시간, t’은 버튼을 누른 뒤의 시간을 의미하는데 유의하라... 2021. 9. 17.
Python 20제] 2020년도 한국정보올림피아드 1차 대회 초등부/고등부 2교시 문제1. 박 터뜨리기 출처 : 반크 카드뉴스 문제] K개의 팀이 박터트리기 게임을 한다. 각 팀은 하나의 바구니를 가지고 있고 바구니에 들어있는 공들을 던겨서 자기 팀의 박을 터드려야 한다. 우리는 게임을 준비하기 위해서, N개의 공들을 K개의 바구니에 나눠 담아야 한다. 이 때, 게임의 재미를 위해서 바구니에 담기는 공들의 개수를 모두 다르게 하고 싶다. 다시 말해서, N개의 공을 K개의 바구기에 빠짐없이 나누어 담는데, 각 바구니에는 1개 이상의 공이 있어야 하고, 바구니에 담긴 공들의 개수가 모두 달라야 한다. 더불어, 게임의 불공정함을 줄이기 위해서, 가장 많이 담기 바구니와 가장 적게 담긴 바구니의 공의 차이가 최소가 되도록 담을 것이다. 공들을 바구에 나눠 담기 위한 규칙들을 정리하면 다음과 같다. 1) N개의 공.. 2021. 9. 17.
C언어 7제] 2020년도 한국정보올림피아드 1차 대회 초등부/고등부 2교시 문제 1. 박 터뜨리기 출처 : 반크 뉴스카드 문제] K개의 팀이 박터트리기 게임을 한다. 각 팀은 하나의 바구니를 가지고 있고 바구니에 들어있는 공들을 던겨서 자기 팀의 박을 터드려야 한다. 우리는 게임을 준비하기 위해서, N개의 공들을 K개의 바구니에 나눠 담아야 한다. 이 때, 게임의 재미를 위해서 바구니에 담기는 공들의 개수를 모두 다르게 하고 싶다. 다시 말해서, N개의 공을 K개의 바구기에 빠짐없이 나누어 담는데, 각 바구니에는 1개 이상의 공이 있어야 하고, 바구니에 담긴 공들의 개수가 모두 달라야 한다. 더불어, 게임의 불공정함을 줄이기 위해서, 가장 많이 담기 바구니와 가장 적게 담긴 바구니의 공의 차이가 최소가 되도록 담을 것이다. 공들을 바구에 나눠 담기 위한 규칙들을 정리하면 다음과 같다. 1) N개의 공.. 2021. 9. 15.
C언어 6제] 2021년 한국정보올림피아드 1차대회 초등부 2. 나누기 출처 : 반크 카드뉴스 문제] N개의 정수 수열 A1, A2,..., AN이 주어진다. 수열을 각각이 연속된 네 부분으로 나누려고 한다. 단, 각 부분은 최소 하나의 수를 포함해야 한다. 또 각 부분의 합은 모두 같아야 한다. 즉 어떤 i, j, k(1≤i<j<k<N)에 대해서 [A1,...,Ai], [Ai+1,...,Aj], [Aj+1,...Ak], [Ak+1,...AN]으로 나눈다. 예를 들어 주어진 수열이 4, -1, 2, 1, -3, 1, 2, 2, 1, 3이라고 하자. 이 수열을 아래과 같이 나누면 각 부분의 합이 달라서 허용되는 형태가 아니다. [4, -1, 2], [1, -3, 1, 2], [2, 1], [3] 아래와 같이 나눈 경우 각 부분의 합이 모두 같다. [4, -1], [2, 1],.. 2021. 9. 14.
Python 19제] 파워 유저를 위한 파이썬 EXPRESS] p169 CHAPTER 4. 도전문제 출처 : 대한민국 외교부 독도갤러리 문제] 팩토리얼을 꺼꾸로 계산해보자. n!= n x (n-1) x ... x 2 x 1 위의 프로그램을 어떻게 수정하여야 하는가? 참고풀이] n=int(input("정수를 입력하시오 : ")) f=1 print(n,"! = ",end='') for i in range(n,0,-1): if i>1: print(i,"* ",end="") else: print(i,"= ",end="") f *= i print(f) 참고풀이 결과] 대한민국의 아름다운 영토, 독도의 봄 2021. 9. 10.
반응형