Skip to content

Latest commit

ย 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

README.md

Problem 4

Largest palindrome product

A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 ร— 99.
Find the largest palindrome made from the product of two 3-digit numbers.

Korean: http://euler.synap.co.kr/prob_detail.php?id=4
English: https://projecteuler.net/problem=4

System Requirement

  • Tool: Visual Studio Code
  • Language: C
  • Compiler: gcc.exe (MinGW.org GCC-6.3.0-1) 6.3.0
  • Use MinGW

MinGW Download (only windows)

Test - bash

Change directory git root: /Problem4 and compile

gcc Problem4.c

with debugging https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options

gcc -g Problem4.c

Windows Environment Settings
System Variable > Path > Add "C:\MinGW\bin" (Installed path)

Run

a

Test - Visaul Studio Code

  • Open folder "Problem4" by Visual Studio Code
  • Check out settings: launch.json and tasks.json
    • launch.json
      • "miDebuggerPath": "C:/mingw/bin/gdb.exe"
      • Use MinGW installed your path
    • tasks.json
      • Use gdb debug: args[0] = "-g"
  • Press F5 to debug start

Solve

  • Palindrome ๊ตฌํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • ์ฃผ์–ด์ง„ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜, sprintf
    • ๊ทธ ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์€ ๋ฌธ์ž์—ด, strrev
    • ์ฒซ ๋ฌธ์ž์—ด๊ณผ reversed ๋ฌธ์ž์—ด์ด ๊ฐ™์œผ๋ฉด Palindrome ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค, strcmp
  • IsPalindrome ํ•จ์ˆ˜๋Š” ์œ„ ์„ธ ์•„์ด๋””์–ด๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•œ ํ•จ์ˆ˜์ด๋‹ค.
  • ์ฃผ์–ด์ง„ ์กฐ๊ฑด์€ ์„ธ์ž๋ฆฌ ์ˆ˜์˜ ๊ณฑ ์ค‘ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์„ธ์ž๋ฆฌ ์ˆ˜ ์ตœ๋Œ€๊ฐ’์ธ 999 ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ loop๋ฌธ์„ ์—ญ์œผ๋กœ ๋Œ๋ ค ์ฐพ์•„๋‚ธ๋‹ค.
  • ๋‹ค์‹œ ์ƒ๊ฐํ•ด ๋ณด๋ฉด 999 ~ 901 ๋ฒ”์œ„ ์•ˆ์—์„œ ๋‘ ์ˆ˜๋ฅผ ๊ณฑํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ Palindrome์ด ๋‚˜์˜ค๊ฒŒ ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ for๋ฌธ์˜ ํ˜•ํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๊ฒŒ ๋œ๋‹ค. for (int i=999; i>=900; i--)
  • ์ด์œ ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด๋ฉด 999 x 901์€ 900,099 ์ด๋ฉฐ ๊ตฌ์‹ญ๋งŒ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ˆซ์ž ๋ฒ”์œ„ ์ค‘ ๊ฐ€์ž‘ ์ž‘์€ ์ˆซ์ž์ด๋‹ค.
  • Palindrome ์˜ˆ์ƒ ๋ฒ”์œ„๋Š” 999 x 999์ธ 998,001 ๋ถ€ํ„ฐ์ด๋ฏ€๋กœ ์ด ์‚ฌ์ด์— Palindrome์ด ์žˆ์„ ๊ฒƒ์ด๋ผ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•ด์„œ nested for loop์„ ๋งŒ๋“ค์–ด ๊ฐ€์žฅ ๋จผ์ € IsPalindrome์— ๊ฑธ๋ฆฌ๋Š” ์ˆ˜๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค๋ฉด ์„ธ์ž๋ฆฌ ์ˆ˜์˜ ๊ณฑ ์ค‘ ๊ฐ€์žฅ ํฐ palindrome ๊ฐ’์ด๋ผ๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.

Review

  • ์˜ˆ์ „์—๋Š” ๋ชฐ๋ž๋Š”๋ฐ ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์–ด์„œ ์ถœ๋ ฅํ•˜๋Š” strrev ํ•จ์ˆ˜์˜ ์กด์žฌ๋ฅผ ์•Œ์•˜๋‹ค. ์‹ ๊ธฐํ•œ๊ฑด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์€ ๋ฌธ์ž์—ด๋„ ๋’ค์ง‘ํžˆ๊ณ  ๋ฆฌํ„ดํ•œ ๋ฌธ์ž์—ด ์ฃผ์†Œ๋„ ๋’ค์ง‘ํžŒ ์›๋ณธ ๋ฌธ์ž์—ด์˜ ์ฃผ์†Œ๋ฅผ ์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค!
  • ์• ์ดˆ์— parameter๋ฅผ const๋กœ ๋ฐ›์ง€ ์•Š์•˜์œผ๋‹ˆ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ์ธ๊ฑฐ ๊ฐ™์€๋ฐ, ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” ์›๋ณธ ๋ฌธ์ž์—ด์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  reverse ๋ฌธ์ž์—ด์„ ๊ตฌํ•œ๋‹ค๋Š” ์ ์—์„œ ์‹ ์„ ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
  • goto๋ฅผ ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค๋Š” ์••๋ฐ•์ด ์–ธ์ œ๋ถ€ํ„ฐ ์‹œ์ž‘๋๋Š”์ง€ ๋ชฐ๋ผ๋„, C์–ธ์–ด์—์„œ nested for loop์„ break ํ•˜๋Š” ์ผ์ด ๋งˆ๋ƒฅ ์‰ฝ์ง€๋งŽ์€ ์•Š์•˜๋‹ค. ๊ทธ๋ƒฅ ์†ํŽธํ•˜๊ฒŒ goto ์“ฐ๋Š”๊ฒŒ ๊น”๋”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.