HomeAbout Me

BOJ 18883 N M 찍기

By kuper0201
Published in 알고리즘
2023-05-25
1 min read
BOJ 18883 N M 찍기

Table Of Contents

01
문제
02
입력
03
출력
04
풀이

문제

BOJ 18883 N M 찍기 바로 가기

자연수 N, M이 주어졌을 때, 1부터 N×M까지 출력 형식대로 출력해보자.


입력

첫째 줄에 공백 한 칸으로 구분한 N, M이 주어진다. 두 수는 1,000보다 작거나 같은 자연수이다.


출력

총 N개의 줄을 출력해야 한다. 각 줄에는 M개의 정수를 공백 한 칸으로 구분해 출력해야 한다. 1번 줄에는 1부터 M까지, 2번 줄에는 M+1부터 2×M까지, ..., N번 줄에는 (N-1)×M+1부터 N×M까지 출력해야 한다.

모든 줄의 시작과 끝에 공백이 있으면 안되고, 모든 줄은 줄바꿈(\n)으로 끝나야 한다.


풀이

해당 문제는 별 찍기와 다르지 않은 단순 구현문제이다.

별 찍기 문제에서는 인덱스를 따로 저장할 필요가 없었지만 해당 문제에서는 인덱스를 저장하고 증가시키며 출력하면 해결할 수 있다.

이 때, 문제의 출력 부분에 명시된 "모든 줄의 시작과 끝에 공백이 있으면 안되고, 모든 줄은 줄바꿈(\n)으로 끝나야 한다."의 제약 조건에 유의하여 구현해야 한다.

코드 보기(Java)
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        
        // N, M 입력
        String[] s = br.readLine().split(" ");
        int N = Integer.parseInt(s[0]);
        int M = Integer.parseInt(s[1]);

        int idx = 1; // 인덱스 변수
        for(int i = 0; i < N; i++) {
            for(int j = 0; j < M; j++) {
                if(j == M - 1) sb.append(idx +"\n"); // 마지막일 경우 다음줄로
                else sb.append(idx +" "); // 마지막이 아닐 경우 한칸 띄기
                idx++;
            }
        }

        System.out.println(sb);
    }
}
코드 보기(C++)
#include <iostream>
#include <string>

#define fastio ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr)
#define endl '\n'

using namespace std;

int main() {
    fastio;
    
    // N, M 입력
    int N, M;
    cin >> N >> M;
    
    int idx = 1; // 인덱스 변수
    for(int i = 0; i < N; i++) {
        for(int j = 0; j < M; j++) {
            if(j == M - 1) cout << idx << endl; // 마지막일 경우 다음줄로
            else cout << idx << " "; // 마지막이 아닐 경우 한칸 띄기
            idx++;
        }
    }
    
    return 0;
}
코드 보기(Kotlin)
fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    // N, M 입력
    var s = readLine().split(" ")
    var N = s[0].toInt()
    var M = s[1].toInt()
    
    var sb = StringBuilder()
    var idx = 1 // 인덱스 변수
    for(i in 0 until N) {
        for(j in 0 until M) {
            if(j == M - 1) { // 마지막일 경우 다음줄로
                sb.append(idx.toString() +"\n")
            } else { // 마지막이 아닐 경우 한칸 띄기
                sb.append(idx.toString() +" ")
            }
            
            idx++
        }
    }

    print(sb)
}
코드 보기(Python)
from sys import stdin

def main():
    # N, M 입력
    s = stdin.readline().split(' ')
    N = int(s[0])
    M = int(s[1])

    sb = []
    idx = 1 # 인덱스 변수
    for i in range(0, N):
        for j in range(0, M):
            if j == M - 1: # 마지막일 경우 다음줄로
                sb.append(str(idx) +"\n")
            else: # 마지막이 아닐 경우 한칸 띄기
                sb.append(str(idx) +" ")
            idx += 1

    print("".join(sb))

if __name__ == "__main__":
    main()
코드 보기(Swift)
import Foundation

func main() {
    // N, M 입력
    var s = readLine()!.split(separator: " ")
    var N = Int(s[0])!
    var M = Int(s[1])!
    
    var sb = ""
    var idx = 1 // 인덱스 변수
    for i in 0..<N {
        for j in 0..<M {
            if j == M - 1 { // 마지막일 경우 다음줄로
                sb.write(String(idx))
                sb.write("\n")
            } else { // 마지막이 아닐 경우 한칸 띄기
                sb.write(String(idx))
                sb.write(" ")
            }
            idx += 1
        }
    }
    
    print(sb)
}

main()

Tags

#algorithm
Previous Article
BOJ 1920 수 찾기
kuper0201

kuper0201

안녕하세요!

Related Posts

BOJ 1009 분산처리
BOJ 1009 분산처리
2023-05-25
1 min

Quick Links

HomeAbout Me

Social Media