노트
언어별 2차원 배열 입력
tose33
2021. 12. 5. 11:15
다음과 같이 2차원 배열의 행, 열의 크기가 주어지고
입력될 2차원 배열이 주어진다면?
3 3
abc
def
ghi
c++
char d[10][10];
int h, w;
cin >> h >> w;
for(int r = 0; r < h; r++) scanf("%s", d[r]);
c++은 이런식으로 c의 입력인 scanf를 이용해 문자열을 입력 받는것처럼 각 행에 입력하면 각 열에 한글자씩 들어간다.
python
d = ['' for _ in range(10)]
h, w = map(int, input().split())
for r in range(h): d[r] = input()
파이썬도 비슷하게 string형 리스트를 생성하고
각 행에 입력받으면 된다.
d = [list(map(str, input().split())) for _ in range(3)]
요렇게도 가능
JAVA
import java.nio.charset.StandardCharsets;
import java.util.*;
public class Main
{
static String[] d = new String[10];
static int w, h;
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
h = sc.nextInt(); w = sc.nextInt();
for(int r = 0; r < h; r++) d[r] = sc.next();
// 출력
for(int r = 0; r < h; r++)
System.out.println(d[r]);
}
}
자바도 비슷하게 String형 배열을 만들어서 행별로 입력받아도 된다.
하지만 이 경우 자바의 String은 불변의 특징을 갖기때문에 나중에 문자열의 일부분을 수정해야 한다면 불편할수 있다.
// String d[0]의 0번째 인덱스의 문자 수정
char[] charArray = d[0].toCharArray();
charArray[0] = 'D';
d[0] = String.valueOf(charArray);
물론 이런식으로 char형 배열로 바꿔서 수정하고 다시 문자열로 바꿀수도 있고 StringBuilder를 써서 바꿀수도 있다.
import java.nio.charset.StandardCharsets;
import java.util.*;
public class Main
{
static byte[][] d = new byte[10][];
static int w, h;
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
h = sc.nextInt(); w = sc.nextInt();
for(int r = 0; r < h; r++) d[r] = sc.next().getBytes();
// 출력
for(int r = 0; r < h; r++)
System.out.println(new String(d[r]));
}
}
위와같이 byte type을 사용하기도 한다.
C#
using static System.Console;
namespace Project1
{
public class Class1
{
static char[][] d = new char[10][];
static int h, w;
static void Main()
{
// 한줄 입력 받아서 Split으로 공백기준 나눔
string[] s = ReadLine().Split(' ');
h = int.Parse(s[0]); w = int.Parse(s[1]);
// 한줄 읽어서 배열로 변환
for (int r = 0; r < h; r++) d[r] = ReadLine().ToCharArray();
}
}
}
2차원 char배열 선언후,
ReadLine()으로 한 줄 읽은후에 ToCharArray()로 배열로 변환
Kotlin
import java.util.*
var d = Array<String>(501) {""}
var w = 0; var h = 0
fun main()
{
val s = Scanner(System.`in`)
h = s.nextInt(); w = s.nextInt()
for(r in 0 until h) d[r] = s.next()
// 출력
for(r in 0 until h) println(d[r])
}
코틀린도 String타입의 어레이를 만들어서 scanner.next()로 한줄씩 받으면되는데
var nc = 5
d[0] = d[0].substring(0, nc) + 'D' + d[0].substring(nc+1)
자바와 비슷하게 문자열의 일부를 수정하려면 이런식으로 substring() 메소드를 이용할 필요가 있다.