Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 공부

이차원배열 입력받기! (백준- 행렬덧셈 feat.파이썬 print 옵션) 본문

코딩 테스트 준비/c++

이차원배열 입력받기! (백준- 행렬덧셈 feat.파이썬 print 옵션)

방구석개발입문 2022. 11. 4. 16:01

이 문제는 그냥 풀려면 풀 수 있는데...

#include <stdio.h>

int main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    
    int arr1[x][y];
    int arr2[x][y];
    int ans[x][y];
    
for(int i=0; i<x; i++)          //이차원 배열 입력 배열 arr1
{
for(int j=0; j<y; j++)
{
scanf("%d",&arr1[i][j]);
}
}

for(int i=0; i<x; i++)         //이차원 배열 입력 배열 arr2
{
for(int j=0; j<y; j++)
{
scanf("%d",&arr2[i][j]);
ans[i][j] = arr1[i][j] + arr2[i][j];
}
}

for(int i=0; i<x; i++)         //더한 배열 ans 출력
{
    for(int j=0; j<y; j++)
    {
        printf("%d ",ans[i][j]);
    }
    printf("\n");
}
}

이런식으로 입력을 이중 for문을 두번 써서 쓰면 되긴하지만....

 

 

 

 

3차원 배열을 쓰면 for문을 한번만 쓰면 되지 않을까???싶어서 아래와 같이 진행을 해봤다

#include<stdio.h>

int main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    
    int arr[2][x][y];
    int ans[x][y];
    
    for(int i=0; i<2; i++)     //행렬 두개
    {
        for(int j=0; j<x; j++)
        {
            for(int k=0; k<y; y++)//열
            {
                scanf("%d",&arr[i][j][k]);
            }   
        } 
    }
    
    for(int j=0; j<x; j++){//행
        for(int k=0; k<y; y++)//열
        {
            ans[j][k] = arr[0][j][k] + arr[1][j][k];
            printf("%d ",ans[j][k]);
        }   
        printf("\n");
    }
}

결과는 실패...왜인지는 아직 찾지 못해서 다음주에 교수님께 여쭤봐야겠다...ㅠㅠ

 

왜 실패인지 이유를 찾기 위해 scanf의 원리를 다시 조사하는 중! 알아내면 다시 보충하기로..ㅠㅠ

 

 

 

 

 

 

 

 

 

 

파이썬으로 풀면

import sys

a = []
b = []
n,m = map(int,input().split())

for i in range(n):
    data = list(map(int,sys.stdin.readline().split()))
    a.append(data)   //리스트에 요소추가

for i in range(n):
    data = list(map(int,sys.stdin.readline().split()))
    b.append(data)    //리스트에 요소추가

for i in range(n):
    for j in range(m):
        print(a[i][j]+b[i][j],end=" ")     //줄바꿈을 하지 않기 위해 end옵션을 이용
    print()

시간초과의 문제가 생길 수 있으므로 반복문으로 여러줄을 입력받을 때는

input()대신

sys.stdin.readline()을 사용합니다!

 

 

파이썬 print()옵션

1. sep(separation) : 분리하여 출력

 

ex) print(1,2,3, sep='#')

   출력>> 1#2#3                       >>문자열 사이의 구분자가 #이 됨

 

 

2.end  : 뒤의 출력값과 이어서 출력(줄바꿈 x)

 

ex) print("i love", end=" ")

      print("you")

      출력>> i love you             >> 공백을 한칸 줘 띄어서 이어출력 (구분자처럼 사용 가능)

 

 

3. format : 특정부분을 바꾸기

 

ex) print("오늘은 {0}년 {1}월 {2}일 입니다.".format(2022,11,4))

     출력 >> 오늘은 2022년 11월 4일 입니다.