본문 바로가기
Programming

[알고리즘] 알고리즘 숙련하기 - 1회차, 입출력과 사칙연산

by 해도 Haedo 2022. 9. 21.

안녕하세요~ 뉴핀입니다.

프로그래밍을 숙련하기 위해서는 다양한 방법이 있죠. 그중에서 알고리즘 풀이는 컴퓨터 프로그래밍 종사자들에겐 늘 새로운 도전이자 재미인데요. 알고리즘은 빅데이터 응용분야, 내비게이션, 인공지능 설계 등의 복잡한 수식과 연산을 요하는 고급 프로그램에 쓰일 뿐 아니라 웹 프로그래밍에서도 자주 쓰입니다. 데이터 연산, db최적화등뿐만 아니라 대용량 파일 렌더링 최적화, 동적 레이아웃 연산, 특수 서비스의 수식 연산도 포함되죠.

그런 의미에서 대표적인 알고리즘 풀이 사이트를 방문하여 주어진 문제를 해결하면서 알고리즘 숙련도를 높여보도록 할게요.

Photo by Андрей Сизов on Unsplash

백준 알고리즘 사이트 둘러보기

한국에선 대표적으로 백준 알고리즘이 있습니다. 사이트 링크가 있으니, 여러분들도 같이 풀어보도록 해요.

Captured by baekjoon

상단 헤더에 GNB(Global Navigation Bar) 보이시나요? 회원가입과 로그인 페이지 링크가 보이고 그 아래엔 다양한 탭 메뉴들이 있습니다. '문제'탭을 눌러서 '단계별로 풀어보기' 페이지로 이동해보겠습니다.

Captured by baekjoon

콘텐츠 메인 부분에 많은 종류의 문제들이 단계별로 잘 정리되어 있는 것이 보입니다. 1단계는 가장 기초적인 입, 출력과 사칙연산입니다. 연습으로 '단계 1, 입출력과 사칙연산'에 있는 '문제 번호, 10718'을 풀어볼게요.

위에 있는 '문제, 2557번'은 재미가 없습니다.

위의 탭에서 '제출'을 누르면 문제 풀 수 있도록 웹에디터를 제공하는 페이지가 보이실 텐데, 회원이 아니신 분들은 '회원가입'을 해주시고 '로그인'하시면 되겠습니다.

Captured by baekjoon

콘텐츠에서 보시다시피, 백준 알고리즘 사이트에서는 다행히 javascript 언어로도 문제를 풀 수 있도록 에디터를 제공합니다. '언어' 셀렉트 박스를 클릭하시고 'nodejs' 옵션을 선택해주세요. 'node.js'는 쉽게 말해 javascript기반의 런타임입니다. 즉, node.js에디터를 선택하시면 여러분들도 저와 같이 javascript언어와 문법으로 문제를 풀어나가실 수 있습니다.

그럼, 저와 함께 제가 추천해드리는 연습문제를 풀어보도록 하겠습니다. '단계 1'에 있는 다른 모든 문제는 따로 한 번씩 풀어보는 것을 추천드릴게요.

문제 10718. 두 줄에 걸쳐 "강한친구 대한육군"을 한 줄에 한 번씩 출력한다.

ACM-ICPC 인터넷 예선, Regional, 그리고 World Finals까지 이미 2회씩 진출해버린 kriii는 미련을 버리지 못하고 왠지 모르게 올해에도 파주 World Finals 준비 캠프에 참여했다. 대회를 뜰 줄 모르는 지박령 kriii를 위해서 격려의 문구를 출력해주자.

아래를 드래그(drag)하면 풀이가 보입니다.

console.log("강한친구 대한육군");
console.log("강한친구 대한육군");

Captured by baekjoon

정답을 제출하고 나면 틀렸는지 맞았는지 확인할 수 있는 페이지로 링크됩니다. '메모리', '시간', '언어', '코드 길이'등의 요소는 알고리즘 풀이에서 정/오답의 여부보다 중요한 요소입니다. 메모리를 최대한 적게 쓰며, 실행시간을 빠르게 하고, 코드 길이는 가독성을 고려하여 너무 짧지도 길지도 않게 짜야합니다.

Captured by baekjoon

위의 사진에서 저는 다양한 방법으로 문제를 해결했으며, 그때마다 메모리와 시간, 코드 길이가 달라지는 것을 볼 수 있습니다. 지금 같은 단순 출력은 메모리 소모와 시간 소요 차이가 적어서 아마도 코드 가독성이 좋은 풀이를 쓰겠지만, 앞으로 마주하게 될 어려운 문제들의 여러 풀이법들에 대해서 어떤 것이 좋은 풀이인가를 판단하는 능력도 중요할 것입니다.

다음 문제도 풀어볼까요? 중간에 두 가지를 입력하여 연산을 수행하는 것은 난이도가 있으니 아래쪽으로 내려와서 비교적 쉬운 문제를 먼저 풀어보겠습니다.

문제 10171.  준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.

첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.

아래를 드래그하면 풀이가 보입니다.

const fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim();
console.log(input+"??!");

Captured by baekjoon

'입력'에는 백준에서 매뉴얼로 지정해둔 코드가 있습니다. 링크로 들어가셔서 'node.js'파트를 찾아서 읽어보시고 쓰시면 됩니다. 혹은, 제가 써놓은 코드들을 활용하셔도 무방합니다.

let input = fs.readFileSync('/dev/stdin').toString().split(' ');

let input = fs.readFileSync('/dev/stdin').toString().trim();
 

위의 두 문제를 문제없이 풀어내셨다면, 1단계에 있는 나머지 문제들도 모두 해결하실 수 있으리라 생각합니다. 이번 편에서는 '백준 알고리즘' 사이트를 둘러보고, 맛보기로 문제도 풀어보는 시간을 가졌습니다. 다음 시간부터는 '문제를 해결하기 위해 어떤 사고를 해야 하는지'와 '다양한 정답지들 사이에서 최적의 알고리즘을 찾아내는 시간'을 가지도록 하겠습니다.

모두 고생하셨습니다.

감사합니다. 

댓글