*perl* my $input = <STDIN> ; 사용시 ()() OK, ()(( fail 관련 질문 드립니다

yoon7068의 이미지

질문 내용
test.pl 이라는 perl file을 만드려고 합니다
구문 내용은 아래와 같습니다
() () -> 이와 같이 열린 괄호와 닫힌 괄호가 한쌍으로 되어있으면 OK.
(( () -> 이와 같이 열린 괄호와 닫힌 괄호가 쌍으로 되어있지 않으면 FAIL.

이러한 perl 파일을 만드려고 합니다

my $input = ;
위와 같이 기입후에
test.pl () emter 치면 OK
test.pl (( emter 치면 FAIL

구현 되게 만들고 싶은데 push, pop이나 underflow, overflow 등의 함수를 사용 하면
가능하다고 하는데 생초보라 이틀 내내 했는데 답이 안나옵니다..ㅠㅠㅠㅠ
고수님들 도움 부탁드리겠습니다

raymundo의 이미지

숙제를 대신 해달라는 게 아니라면, 이틀 내내 한 그 내용을 적어주시면 여기 계신 분들이 잘못된 부분을 짚어주실 겁니다.

1.

괄호로 이루어진 문자열을 뭘로 받으실 건지부터 정하세요.

my $input = <STDIN>;

STDIN으로 받을 경우는 본문에 적은 것처럼 할 수 없습니다.

$ perl t.pl
((()))<엔터>     # 실행 후 키보드로 입력을 하거나
OK
 
$ echo "((())" | perl t.pl    # 파이프로 넘겨주거나
FAIL

본문처럼

$ perl t.pl "((()))"    # 괄호는 쉘에서 특수 문자로 쓰이기 때문에 따옴표로 둘러싸야 함
OK

이렇게 명령행인자로 받고 싶다면 @ARGV 배열에 명령행 인자가 담기니까 거기서 뽑아 쓰세요.

my $input = $ARGV[0];

2.

일단 입력을 받았으면 그 입력에서 한 글자씩 읽어야겠죠.

my $input = "abcde";
 
# substr 로 특정 위치에서 원하는 갯수의 문자를 읽을 수 있습니다. 위치는 0부터 시작
my $third_character = substr( $input, 2, 1 );   # 'c'
 
# split 으로 스칼라 문자열을 쪼개어 배열로 만들 수 있습니다.
my @chr_array = split //, $input;    # @chr_array = ( 'a', 'b', 'c', 'd', 'e' );

3.

이제 한글자씩 읽을 수 있게 되었으니 남은 건 OK, FAIL 판정하는 것 뿐이네요. 이걸 어떻게 구현할지야 자기 맘입니다만, 문제가 그저 저것 뿐이라면 저라면 그냥 0부터 시작해서 '('가 나오면 +1, ')'가 나오면 -1을 반복하겠습니다. 물론 push, pop 을 써서 다른 배열에 스택을 만들어도 되지만...

value = 0으로 초기화
 
loop: 한 글자씩 읽으면서
   방금 읽은 게 '(' => value = value + 1
   방금 읽은 게 ')' => value = value - 1
 
   현재 value 가 음수라면 => ( 보다 )가 더 많이 등장했다는 뜻이니 더 볼 것도 없이 FAIL 판정하고 종료
 
loop가 다 끝났을 때 value 가 0이면 OK, 아니면 FAIL

좋은 하루 되세요!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.