분류 전체보기 78

백준 1921번: 연속합 (Python)

문제 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야 한다.예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.해설 다이나믹 프로그래밍을 활용해 풀 수 있는 문제다. '연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합' 을 구해야 한다. 따라서 DP[i] 는 'i번째까지의 수열에서 구할 수 있는 최대 연속합' 을 저장하게끔 만들어야 한다. 연속합이 만들어지는 경우는 다음 세 가지 경우이다.이전 최장 연속합과 연결자신 바로 앞 원소(i-1)와 연결자신 그 자체아래..

개발/백준 2022.07.18

백준 2293번: 동전 1 (Python)

문제n가지 종류의 동전이 있다. 각각의 동전이 나타내는 가치는 다르다. 이 동전을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그 경우의 수를 구하시오. 각각의 동전은 몇 개라도 사용할 수 있다.사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다.해설얼핏 보면 그리디를 활용하는 것처럼 보일수도 있지만 다이나믹 프로그래밍을 활용한 문제이다. 상위 가치의 동전이 하위 가치의 동전들의 합으로 구성될 수 있기 떄문이다. (1원, 5원이 있을 경우 1원x5개로 구성 가능) 동전들을 조합해 k원의 가치를 만드는 경우의 수를 모두 구해야 한다. 따라서 DP[n]은 'n원의 가치를 만들 수 있는 모든 경우의 수'가 된다. 동전 DP 문제는 표를 그려보면 쉽게 이해할 수 있다. 아래는 n = ..

개발/백준 2022.07.14

백준 14499: 주사위굴리기 (Python)

문제크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 이 지도의 위에 주사위가 하나 놓여져 있으며, 주사위의 전개도는 아래와 같다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 24 1 3 5 6주사위는 지도 위에 윗 면이 1이고, 동쪽을 바라보는 방향이 3인 상태로 놓여져 있으며, 놓여져 있는 곳의 좌표는 (x, y) 이다. 가장 처음에 주사위에는 모든 면에 0이 적혀져 있다.지도의 각 칸에는 정수가 하나씩 쓰여져 있다. 주사위를 굴렸을 때, 이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다. 0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며, ..

개발/백준 2022.03.17

[파이썬으로 배우는 컴퓨팅 사고] 챕터6 확인학습 답

개인에 의해 작성된 답입니다. 오류 발견시 댓글을 통해 알려주세요. + 과제는 스스로 하기! 1. 이름을 물어보고 입력받은 이름을 사용하여 아래의 예시와 같이 대답하며 인사해주는 프로그램을 작성하시오. name = input("당신의 이름은 무엇인가요? ") print("하이", name, "씨 만나서 반가워요") 2. 고향을 물어보고 입력받은 고향에 대하여 아래의 예시와 같이 답해주는 프로글매을 작성하시오. hometown = input("당신의 고향은 어디인가요? ") print("당신은 아름다운", hometown, "에서 왔군요.") 3. 좋아하는 숫자를 물어 본 후 좋아하는 숫자에 10을 더한 값을 말해주는 프로그램을 작성하시오. number = int(input("당신이 좋아하는 숫자는? ")..

개발/Python 2021.05.11

[파이썬으로 배우는 컴퓨팅 사고] 챕터5 확인학습 답

개인에 의해 작성된 답입니다. 오류 발견시 댓글을 통해 알려주세요. + 과제는 스스로 하기! 1. 2020이라는 정수가 메모리에 2진수로 어떻게 표현되는지 확인해보자. 해당 숫자를 변수에 입력한 후 bin 함수를 활용하면 된다 정수 = 2020 print(bin(정수)) 2. 중국 여행에 앞서 우리나라 돈을 중국 돈(위안)으로 환전하고자 한다. 1위안은 165원이라고 할 떄, 150만원을 위안으로 환전한 결과를 구해보자. 가진돈 = 1500000 위안환율 = 165 가진돈_위안 = 가진돈 / 위안환율 print("환전결과 :", 가진돈_위안) 3. 지름이 30 cm인 피자를 1/4 등분하였다. 이 조각 피자의 넓이를 구해보자. 지름 = 30 반지름 = 지름 / 2 원넓이 = 3.14 * 반지름 * 반지름..

개발/Python 2021.05.11

[파이썬으로 배우는 컴퓨팅 사고] 챕터4 확인학습 답

개인에 의해 작성된 답입니다. 오류 발견시 댓글을 통해 알려주세요. + 과제는 스스로 하기! 1. 쉘 모드에서 intro라는 변수에 자신을 소개하는 내용을 2줄 이상 입력한 후 화면에 출력하시오. >>> print("안녕하세요, 제 이름은 제러미 베러미라고 합니다\n만나서 반갑습니다.") 2. 코드 편집기 모드에서 자신에 대한 소개(이름, 고향, 취미)를 1초 간격으로 화면에 출력되도록 하는 프로그램을 만드시오. import time print("안녕하세요, 제 이름은 제러미 베러미입니다.") time.sleep(1) print("제 고향은 서울입니다.") time.sleep(1) print("취미는 프로그래밍입니다.") time.sleep(1) 3. 2번 문제에서 작성한 소스코드를 1초 간격으로 '삑'..

개발/Python 2021.05.11

컴퓨터 구조 - ISA

ISA ISA는 Instruction Set Achitecture의 줄임이란 걸 밝히고 시작한다. 위 그림은 CPU의 종류중 하나인 MIPS의 ISA 예시이다. 솔직히 봐도 무슨 내용인지 정확히는 모르겠지만, Comments 부분을 주목해 읽어보니 Arithmetic(산술연산) 포맷, Transfer, Branch, Jump 등등이 눈에 띈다. 만약 C언어에서 덧셈을 하는 코드를 짰다면, 우선 그것이 어셈블리어의 add 명령어로 변환이 된다. 이때 add명령어는 산술연산(Arithmetic)에 해당하므로, 위 그림에서 R-format에 해당하는 Intruction이 관계될 것으로 추측할 수 있다. 시간측정 일반적으로 CPU 퍼포먼스를 측정할 때, 우리는 실행 시간을 기준으로 그것을 측정하게 된다. 또한 ..

FLT_MIN의 언더플로우, 왜 이미 최솟값인데도 계속 나누기가 가능할까?

C언어 과외 도중 실수 언더플로우에 대한 질문이 들어왔다. 질문을 살펴보기 전에, 혹시라도 이 글을 읽는 누군가를 위해 언더플로우에 대한 개념부터 먼저 간단히 정리하고 들어가려 한다. 언더플로우란, 메모리가 표현할 수 있는 범위보다 작은 수를 저장할 때 생기는 문제이다. 언더플로우는 두 가지 종류가 있는데, 바로 '정수 언더플로우'와 '실수 언더플로우'이다. 1) 정수 언더플로우 : 지정된 자료형의 범위보다 적은 숫자를 연산하려 할때 발생 ex) char형 변수의 표현범위는 (-128~127) 인데, -128에서 -1만큼 더 감소시키면 -129가 아닌 127이 된다. 2) 실수 언더플로우 : 실수를 아주 큰 수로 나누었을 때, 즉 0에 한없이 가까워질 정도로 아주 작은 수가 되었을 때 발생 ex) FLT..

[Unity] 버튼 영역 모양 바꾸기 (세모, 사다리꼴, 그 어떤 모양도 가능)

유니티를 사용하다보면 모양이 있는 버튼을 만들어야 할 때가 생긴다. 위 사진의 경우 직사각형 모양으로 된 버튼들이 서로 겹쳐있어서 클릭이 되지 않는 경우가 발생한다. 버튼을 이미지 영역에 맞게 맞추는 방법에 대해 다루고자 한다. 1. 새로운 C# 스크립트를 만들고 아래 내용을 복붙한다. using UnityEngine; using System.Collections; using UnityEngine.UI; public class AlphaBtn : MonoBehaviour { public float AlphaThreshold = 0.1f; void Start() { this.GetComponent().alphaHitTestMinimumThreshold = AlphaThreshold; } } 스크립트 이름은..

개발/Unity 2021.01.05

[Unity] 정해진 시간에 비례해서 이동하기

public IEnumerator MoveToPosition(Transform transform, Vector3 position, float timeToMove) { var currentPos = transform.position; var t = 0f; while (t < 1) { t += Time.deltaTime / timeToMove; transform.position = Vector3.Lerp(currentPos, position, t); yield return null; } } 현재 위치, 목표 위치, 이동 시간을 매개변수로 전달받으면 Lerp 보간을 적용받아 부드럽게 움직이는 함수이다. 출처 Move Transform to Target in X seconds - Unity Answers ans..