메뉴 건너뛰기

문제집 / 그룹 문제

문제집 만든이 문제수 조회수 좋아요 생성 수정 공개
블록 코딩 : 04. Value / Conversion 관리자 3 4081 0 2019-02-06
21:16:46
2019-03-24
23:45:52
2019-03-17
11:22:26


값(Value)의 형식

온라인 저지 시스템에서 처리 가능한 값의 형식에는 텍스트, 수치값, 논리값, 널 값, 총 4가지가 있습니다.

  • 텍스트 값 : 문자열(String)이라고 하며, 반드시 큰 따온표(")로 묶어서 처리합니다. 공백, 개행(엔터)도 텍스트로 처리합니다. 큰 따옴표(")로 묶여진 숫자, 예를 들어 "123", "0" 텍스트이며, 이러한 텍스트는 계산이 불가능합니다. 계산을 하려면 텍스트를 수치값으로 변환하는 별도의 작업이 필요합니다.

 

  • 수치값 : 0, 정수, 또는 소숫점이 있는 실수이며, 계산이 가능합니다.

  • 논리값 : 참(true), 또는 거짓(false)으로 조건식 등의 논리 구조를 만들때 사용합니다.

  • 널 값 : 아직 정의되지 않은 값으로, 0 또는 거짓으로 처리되기도 합니다. 

Conversion  블록

입력받은 값을 이용하여 '계산'을 하기 위해서는 값을 적절하게 변환해야 합니다.

입력 값은 무조건 '텍스트(문자열)'이기 때문에, '계산'을 할 수 없지요.. 즉, 계산을 위해서는 '숫자'로 바꿔야 합니다. 다음은 값의 변환과 관련된 블록들입니다. 

  • to number 블록 : 수, 또는 소숫점이 있는 실수 형태의 텍스트정수값, 또는 소숫점이 있는 실수로 변환합니다.

  • to text 블록 : 수치값(정수, 소숫점이 있는 실수)텍스트로 변환합니다.

  • to list of numer 블록 : 숫자(정수, 또는 소숫점이 있는 실수) 형태의 텍스트 리스트숫자(정수, 또는 소숫점이 있는 실수) 리스트로 변환합니다.

  • to list of text 블록 : 숫자(정수, 또는 소숫점이 있는 실수) 형태의 텍스트 리스트숫자(정수, 또는 소숫점이 있는 실수) 리스트로 변환합니다.

예제 1

다음 프로그램은 3개의 텍스트 원소가 저장된 리스트 ['10', '20', '30']를 수치 원소가 저장된 리스트 [10, 20, 30]로 변환하고 있습니다.



코드 제목 시간(초) 메모리(MB) 나의판정 소스 제출 통과 비율(%) 시도 성공 비율(%)

00a22 정수 2개를 1개 라인으로 입력받아 덧셈하기 5 1 64 7869 2737
34.8
2289 2159
94.3
00a28 고장난 체중계 (상수 뺄셈) 8 1 64 2941 1598
54.3
1429 1375
96.2
00a52 정수 2개를 라인 단위로 입력받아 덧셈하기 3 1 64 5130 1415
27.6
1334 1200
90.0

00a22와 00a52 문제를 풀어 보겠습니다. 두 문제 모두 2개의 정수를 입력 받아, 덧셈을 해야 합니다. 그러나, 정수가 다른 방식으로 입력됩니다. 즉, 00a22는 한 줄에 2개의 정수가 공백을 사이에 두고 주어집니다. 00a52 문제는 두 줄에 걸쳐 1개의 정수가 각각 들어옵니다.

다음은 00a22 문제의 입력 예시입니다.

다음은 00a52 문제의 입력 예시입니다.

00a22 문제

값을 입력받아야 하므로, input by line 명령문을 사용해야 합니다. 이 명령문은 한 줄 전체를 텍스트 형식으로 입력 받습니다. 즉, 아래와 같이 말입니다.

즉, 이 명령문은 12, 13이 각각 분리된 정수 2개가  아닌 하나의 텍스트 값 "12 13"을 입력 받습니다. 따라서, 공백을 기준으로 두 값으로 분리하는 작업이 필요합니다. 이때 필요한 명령문이 input by line with delimiter 명령문입니다. 주의할 점은 이 명령문은 주어진 구분자 단위로 텍스트를 분리합니다. 이렇게 분리된 2개의 값 또한 텍스트라는 점을 잊지 마세요.

출력 화면에서 확인할 수 있듯이, 분리된 텍스트 '10', '15'가 리스트 형태로 저장되어 있습니다.

텍스트 값을 이용하여 '계산'을 하기 위해서는 텍스트 값을 수치값으로 바꿔야 계산할 수 있습니다. 텍스트 값를 숫치값으로 바꿀 때는 to number 블록을 사용합니다. 만약, 리스트에 저장된 여러 개의 텍스트를 한꺼번에 수치값으로 변경할 때는 to list of number 명령문을 사용합니다.

to list of number 블록에 의해서 텍스트 리스트 ['10', '15']이 수치 리스트 [10, 15]로 변환된 것을 확인할 수 있습니다.

리스트에 저장된 값을 가져올 때는 첨자값을 사용합니다. 리스트의 첫번째 요소 값의 첨자는 1 입니다. 리스트의 요소가 2개로 구성되어 있는 경우, 첨자 1위치에 있는 값을 첫번째(first) 값, 첨자 2 위치에 있는 값은 마지막(last) 값이므로 다음 그림처럼 구현할 수 있습니다.

다음과 같이 구현할 수도 있습니다.

00a52 문제

00a52 문제를 풀어보겠습니다. 00a52 문제가 00a22 문제와 다른 점은 2개의 값이 2개 라인에 걸쳐 각각 입력된다는 점입니다. 1개 라인에 1개의 값이 입력되니 00a22 문제처럼 하나의 텍스트 값을 '공백'으로 구분하여 분리하는 작업이 필요 없습니다. 그러나 입력된 텍스트 값을 수치 값으로 변경하는 작업을 생략할 수는 없습니다. 만약 아래와 같이 했다면 어떻게 될까요?

텍스트 값을 덧셈으로 계산하면, 두 값의 합계가 계산되는 것이 아니라, 그냥 '접합'이 됩니다. 아래의 출력 결과 처럼요..

우리가 하고자 하는 것은 '덧셈'을 하는 것입니다. 계속 언급했던 것 처럼, 입력값은 항상 텍스트 값이므로, '계산'을 위해서는 변환을 해야 합니다. 텍스트를 수치값으로 변환하려면, to number 블록을 이용합니다.

다음과 같이 코딩하면, 올바른 답을 얻을 수 있습니다.

 


위로