ìƒ�위 í•목ì�¸ ì¡°ì˜�준/파스칼삼ê°�형ì�˜ ì�´ì „ 코드들입니다.
r2 (2013/04/23) ¶
변경ì � ¶
- PTriangle �래스를 갈아 엎었습니다.
- 왜 바꿨ëƒ�ê³ ë¬¼ì–´ë³´ì‹ ë‹¤ë©´ r1 ì§ ë‚ ì—� 침대ì—� ëˆ„ì› ëŠ”ë�° 너무 야매스러워서 후회후회... 그래서 나름 ì‹ ê²½ì�¨ì„œ 다시 ê³ ì³¤ìŠµë‹ˆë‹¤.
- PTriangle �래스만 똑 떼서 파스칼 삼�형� 필요로 하는 다른 프로그램�서 쓸 수 있게 �� 봤습니다.
- 사실 9시 30ë¶„ì—� 야ì‹� ì œê³µí•˜ëŠ”ë�° ê·¸ 때 까지 í• ê²Œ 없어서 5피실ì—�서 야매야매.
- 왜 바꿨ëƒ�ê³ ë¬¼ì–´ë³´ì‹ ë‹¤ë©´ r1 ì§ ë‚ ì—� 침대ì—� ëˆ„ì› ëŠ”ë�° 너무 야매스러워서 후회후회... 그래서 나름 ì‹ ê²½ì�¨ì„œ 다시 ê³ ì³¤ìŠµë‹ˆë‹¤.
Program.cs ¶
// 파스칼 삼ê°�형 ì¶œë ¥
using System;
namespace PascalTriangle
{
class Program
{
static void Main(string[] args)
{
string s;
int lines;
while (true)
{
Console.WriteLine("삼ê°�형ì�˜ í�¬ê¸°ë¥¼ ìž…ë ¥í•˜ì„¸ìš” (0 = exit)");
s = Console.ReadLine(); //삼ê°�형 í�¬ê¸°ë¥¼ ìž…ë ¥ë°›ì�Œ
try
{
lines = Convert.ToInt32(s);
if (lines < 0)
{
Exception e = new Exception("ìœ íš¨í•˜ì§€ 않ì�€ 범위입니다");
throw e;
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
continue;
}
if (lines == 0) return; // 프로그램 종료
PTriangle pTriangle = new PTriangle(lines);
Printer printer = new Printer(lines, pTriangle.getMax().ToString().Length+1);
for (int i = 0; i < lines; i++)
{
printer.print(pTriangle.Next());
}
}
}
}
}
PTriangle.cs ¶
using System;
namespace PascalTriangle
{
class PTriangle
{
private int[][] _triangle; //파스칼 삼�형
private int _row; //삼�형� � 줄
private int _count; //현재 반환중� 줄
private int _max; //삼�형� 최댓값
public int[][] triangle { get { return _triangle; } }
public int row { get { return _row; } }
public int count { get { return _count; } }
public int max { get { return _max; } }
public PTriangle(int row)
{
this._row = row;
_count = 1;
_triangle = new int[this._row][];
_triangle[0] = new int[] { 1 };
if (this._row > 1) _triangle[1] = new int[] { 1, 1 };
for (int i = 2; i < this._row; i++)
{
_triangle[i] = new int[i+1];
_triangle[i][0] = 1; //줄� 맨 처�
_triangle[i][i] = 1; //줄� 맨 마지막
for (int j = 0; j < i - 1; j++)
{
_triangle[i][j+1] = _triangle[i-1][j] + _triangle[i-1][j+1]; //파스칼 삼�형 규칙
}
}
_max = _triangle[row-1][(row-1)/2];
}
public int[] next()
{
if (_count > _row) return new int[0];
_count++;
return _triangle[_count-2];
}
public void resetCount()
{
_count = 1;
}
public int[] getData(int row)
{
return _triangle[row-1];
}
public int getData(int row, int column)
{
return _triangle[row-1][column-1];
}
}
}
Printer.cs ¶
using System;
namespace PascalTriangle
{
class Printer
{
private int lines; //ì´� ì¶œë ¥í• ì¤„
private int count; //좌우로 ì¶œë ¥í•´ì•¼í• ë¹ˆ 공간ì�˜ 수 (4칸ì�´ 한 단위)
private int scale; //한 칸당 너비 �수야 한다
public Printer(int lines, int scale)
{
this.lines = lines;
this.scale = scale;
if (scale % 2 == 1) this.scale++; //너비가 홀수�면 �수로 변경
}
public void print(int[] nums)
{
count = lines - nums.Length;
if (count % 2 == 1)
{
// 빈 공간ì�˜ 수가 홀수ì�¼ 경우 ê·¸ ë°˜ì�„ ì¶œë ¥
printEmpty(scale / 2);
count--;
}
for (int i = 0; i < count / 2; i++)
{
// 좌측ì�˜ 빈 공간 ì¶œë ¥
printEmpty(scale);
}
for (int i = 0; i < nums.Length; i++)
{
// 빈 ê³µê°� ì¶œë ¥
printEmpty(scale - nums[i].ToString().Length);
// 숫ìž� ì¶œë ¥
Console.Write(nums[i]);
}
Console.Write("\n");
}
private void printEmpty(int size)
{
//ìž…ë ¥ë°›ì�€ 수 ë§Œí�¼ 빈 칸 ì¶œë ¥
for (int i = 0; i < size; i++)
{
Console.Write(" ");
}
}
}
}
ê²°ê³¼ ¶
삼ê°�형ì�˜ í�¬ê¸°ë¥¼ ìž…ë ¥í•˜ì„¸ìš” (0 = exit)
5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
삼ê°�형ì�˜ í�¬ê¸°ë¥¼ ìž…ë ¥í•˜ì„¸ìš” (0 = exit)
6
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
삼ê°�형ì�˜ í�¬ê¸°ë¥¼ ìž…ë ¥í•˜ì„¸ìš” (0 = exit)
0
r1 (2013/04/19) ¶
Program.cs ¶
// 파스칼 삼ê°�형 ì¶œë ¥
using System;
namespace PascalTriangle
{
class Program
{
static void Main(string[] args)
{
string s;
int lines;
while (true)
{
Console.WriteLine("삼ê°�형ì�˜ í�¬ê¸°ë¥¼ ìž…ë ¥í•˜ì„¸ìš” (0 = exit)");
s = Console.ReadLine(); //삼ê°�형 í�¬ê¸°ë¥¼ ìž…ë ¥ë°›ì�Œ
try
{
lines = Convert.ToInt32(s);
if (lines < 0)
{
Exception e = new Exception("ìœ íš¨í•˜ì§€ 않ì�€ 범위입니다");
throw e;
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
continue;
}
if (lines == 0) return; // 프로그램 종료
PTriangle pTriangle = new PTriangle(lines);
Printer printer = new Printer(lines, pTriangle.getMax().ToString().Length+1);
for (int i = 0; i < lines; i++)
{
printer.print(pTriangle.Next());
}
}
}
}
}
PTriangle.cs ¶
using System;
namespace PascalTriangle
{
class PTriangle
{
private int lines; //삼�형� � 줄
private int count; //현재 반환중� 줄
private int[] prv; // ì�´ì „ 줄
private int[] current; // 현재 줄
public PTriangle(int lines)
{
this.lines = lines;
count = 1;
}
public int[] Next()
{
if (count == 1)
{
//삼�형� 머리� 경우
count++;
return savePrv(new int[] { 1 });
}
current = new int[count];
current[0] = 1; //줄� 맨 처�
current[count-1] = 1; //줄� 맨 마지막
for (int i = 0; i < current.Length - 2; i++)
{
current[i + 1] = prv[i] + prv[i + 1]; //파스칼 삼�형 규칙
}
count++;
return savePrv(current);
}
public int getMax()
{
//파스칼 삼�형� 최대값 반환
for(int i = 0 ; i < lines ; i++)
{
Next();
}
count = 1; //초기화
return prv[lines/2];
}
private int[] savePrv(int[] i)
{
//리턴과 ë�™ì‹œì—� int[] prvì—� ì €ìž¥
prv = i;
return i;
}
}
}
Printer.cs ¶
using System;
namespace PascalTriangle
{
class Printer
{
private int lines; //ì´� ì¶œë ¥í• ì¤„
private int count; //좌우로 ì¶œë ¥í•´ì•¼í• ë¹ˆ 공간ì�˜ 수 (4칸ì�´ 한 단위)
private int scale; //한 칸당 너비 �수야 한다
public Printer(int lines, int scale)
{
this.lines = lines;
this.scale = scale;
if (scale % 2 == 1) this.scale++; //너비가 홀수�면 �수로 변경
}
public void print(int[] nums)
{
count = lines - nums.Length;
if (count % 2 == 1)
{
// 빈 공간ì�˜ 수가 홀수ì�¼ 경우 ê·¸ ë°˜ì�„ ì¶œë ¥
printEmpty(scale / 2);
count--;
}
for (int i = 0; i < count / 2; i++ )
{
// 좌측ì�˜ 빈 공간 ì¶œë ¥
printEmpty(scale);
}
for (int i = 0; i < nums.Length; i++)
{
// 빈 ê³µê°� ì¶œë ¥
printEmpty(scale - nums[i].ToString().Length);
// 숫ìž� ì¶œë ¥
Console.Write(nums[i]);
}
Console.Write("\n");
}
private void printEmpty(int size)
{
//ìž…ë ¥ë°›ì�€ 수 ë§Œí�¼ 빈 칸 ì¶œë ¥
for (int i = 0; i < size; i++)
{
Console.Write(" ");
}
}
}
}
ê²°ê³¼ ¶
삼ê°�형ì�˜ í�¬ê¸°ë¥¼ ìž…ë ¥í•˜ì„¸ìš” (0 = exit)
5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
삼ê°�형ì�˜ í�¬ê¸°ë¥¼ ìž…ë ¥í•˜ì„¸ìš” (0 = exit)
6
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
삼ê°�형ì�˜ í�¬ê¸°ë¥¼ ìž…ë ¥í•˜ì„¸ìš” (0 = exit)
0










